关于java:如何从任何地方获取Context?

How to get the Context from anywhere?

本问题已经有最佳答案,请猛点这里访问。

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

谢谢


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

定义一个新类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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并放入

1
2
3
4
5
6
7
<application
    android:name="com.example.app.MyApp"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    .......
    <activity
        ......

然后从你可以打电话的任何地方

1
MyApp.getContext();

希望能帮助到你


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

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

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

The Application context will live as long as your application is alive
and does not depend on the activities life cycle. If you plan on
keeping long-lived objects that need a context, remember the
application object.

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