dev*_*dev 2 android android-context
在我的应用程序中,我在不同的地方引用上下文,包括Intent,访问资源,文件操作,AlertDialog等.而且难以在不同的类中传递当前上下文.所以我尝试在启动器活动中的单例类中设置应用程序基础上下文.因此,在启动应用程序时,我正在获取应用程序上下文并将其设置为类.后来我指的是该上下文的相同实例.但是在某些地方AlertDialog,如果我使用基本上下文,它就会出错.那么,将上下文保持在一个公共位置并访问相同而不是在不同类之间传递当前上下文是一种好的做法吗?或者在不同类之间进行通信时传递上下文的优先方式是什么?
这是我获取上下文的课程
public class AppContext extends Application {
private static Context sContext = null;
@Override
public void onCreate() {
super.onCreate();
sContext = getApplicationContext();
}
public static Context getContext() {
return sContext;
}
}
Run Code Online (Sandbox Code Playgroud)
但是在某些地方,例如AlertDialog,如果我使用基本上下文,则会出错
您不能在应用程序上下文中显示对话框.你只能使用Activity上下文来做到这一点.
那么,将上下文保持在一个公共位置并访问相同而不是在不同类之间传递当前上下文是一种好的做法吗?
这取决于上下文的类型.如果这是一个应用程序上下文,您可以将其存储在一个单例中,如果您真的想要.如果它是一个Activity上下文,你应该通过引用传递它,并在将该引用存储在某处时要小心,以避免内存泄漏.
或者在不同类之间进行通信时传递上下文的优先方式是什么?
可以Context作为参数传递.Context只要可以安全地存储对它的引用是可以的.
例如,从那里开始AsyncTask并保持对Activity上下文的引用是不安全的,因为AsyncTask它有自己的生命周期,并且它将阻止Activity在屏幕旋转时收集垃圾.这将导致内存泄漏.在这种情况下,最好有一个WeakReferenceto活动上下文.
所以,我的观点是,您可以将上下文作为参数传递到任何您想要的位置.如果你想保持对上下文的引用 - 小心.
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |