在Android中,有没有办法获得静态方式的应用程序的上下文?例如,从后台线程中检索它。
由于
答案 0 :(得分:73)
最简单(也是最正确)的方式是:
定义一个新类
public class MyApp extends Application {
private static MyApp instance;
public static MyApp getInstance() {
return instance;
}
public static Context getContext(){
return instance;
// or return instance.getApplicationContext();
}
@Override
public void onCreate() {
instance = this;
super.onCreate();
}
}
然后在清单中,您需要将此类添加到“应用程序”选项卡的“名称”字段中。或者编辑xml并放入
<application
android:name="com.example.app.MyApp"
android:icon="@drawable/icon"
android:label="@string/app_name"
.......
<activity
......
然后从任何地方打电话
MyApp.getContext();
希望有所帮助
答案 1 :(得分:19)
基本上你有2种类型的上下文 - 活动上下文和Application Context。
没有必要只为一切使用一个Context。如果您在每种情况下都需要使用一个Context,则会出现问题。 最好遵循这样的方法 - 在活动范围之外使用活动上下文和应用程序上下文,这将有助于您避免{ {3}}
如果您阅读本文,您可以看到两个上下文之间的区别。
只要您的应用程序处于活动状态,应用程序上下文就会存在 并且不依赖于活动的生命周期。如果你打算 保持需要上下文的长寿命对象,记住 应用对象。
相反,活动上下文与活动相关联,并且可以在活动被销毁时多次销毁 - 更改屏幕方向,后退按钮等。