如何从任何地方获取上下文?

时间:2012-02-25 16:12:48

标签: java android multithreading thread-safety

在Android中,有没有办法获得静态方式的应用程序的上下文?例如,从后台线程中检索它。

由于

2 个答案:

答案 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}}

如果您阅读本文,您可以看到两个上下文之间的区别。

  

只要您的应用程序处于活动状态,应用程序上下文就会存在   并且不依赖于活动的生命周期。如果你打算   保持需要上下文的长寿命对象,记住   应用对象。

相反,活动上下文与活动相关联,并且可以在活动被销毁时多次销毁 - 更改屏幕方向,后退按钮等。