如何静态获取非活动类的当前活动上下文

时间:2013-07-19 13:37:19

标签: android

我有一个需要启动新活动的非活动类。现在我只是将当前上下文作为参数传递,但我想尽可能静态地访问上下文。我已经尝试创建一个新的应用程序(MyApplication扩展应用程序),作为一个新的应用程序和主要的应用程序,并没有工作。有什么建议吗?

当前代码:

public class SharedFunctions {
    public static void doSomething(Context context){
        Intent i = new Intent(context, NextActivity.class);
        context.startActivity(i);
    }
}

2 个答案:

答案 0 :(得分:3)

更简洁的方法是将Context传递给每个方法。这是更多的打字,但它有助于确保您没有泄露参考。

当然,如果你真的需要静态引用它,你可以在SharedFunctions类中保留一个静态成员并为每个Activity设置它。

onResume()onPause()可能是设置/清除它的好地方,但根据您的需要,您可能想要更改它。尽量不要继续引用旧活动。

public class SharedFunctions{
    private static Context context;

    public static void setContext(Context ctx){
        context = ctx;
    }

    public static void doSomething(){
        context.someContextFunction();
    }

}

在每个活动中:

protected void onResume(){
    SharedFunctions.setContext(this);
}

protected void onPause(){
    SharedFunctions.setContext(null);
}

答案 1 :(得分:1)

创建此类:

public class MyApplication
    extends Application
{
    private static Context context;

    @Override
    public void onCreate()
    {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext()
    {
        return context;
    }
}

之后,您必须将此类添加到application(Manifest)中的字段名称

<application
     android:name="yourPackageName.MyApplication"
     ........
</application >

因此,您可以在应用程序的任何位置调用MyApplication.getContext()并获取上下文。

希望,我帮助你。