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

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

谢谢


答案 1

最简单(和正确)的方法是:

定义新类

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();

希望它有帮助


答案 2

基本上,您有 2 种类型的上下文 - 活动上下文应用程序上下文

没有必要对所有事情都只使用一个上下文。如果您在需要 Context 的每种情况下都使用一个 Context,则会出现问题。最好遵循这样的操作 - 在传递超出活动范围的上下文时,在活动和应用程序上下文中使用活动上下文,这将有助于避免内存泄漏

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

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

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


推荐