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

Car*_*ine 32 java multithreading android thread-safety

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

谢谢

Add*_*dev 75

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

定义一个新类

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在清单中,您需要将此类添加到"应用程序"选项卡的"名称"字段中.或者编辑xml并放入

<application
    android:name="com.example.app.MyApp"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    .......
    <activity
        ......
Run Code Online (Sandbox Code Playgroud)

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

MyApp.getContext();
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • 这会有效,但要小心,因为使用任何你不滥用它的单身.回答[这个问题](http://stackoverflow.com/questions/7298731/when-to-call-activity-context -or-application-context/7298955#7298955)解释为什么ApplicationContext很少(尽管有时)使用正确的上下文.最好的方法:除非你只是公开一个公共方法,它将一个Context作为一个参数,在你的类中需要Context(并从你的Activity传递它等),这就是这样做的方法.Exp:public void abc(Context c,int a); 并从任何活动中调用它. (3认同)

hov*_*yan 19

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

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

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

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

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

  • 这是一个很好的答案. (2认同)