整个应用程序的Android上下文

时间:2013-05-04 17:33:58

标签: android android-context

这个问题的目的是向社群询问我为我的应用程序采取的方法是否正确或可能有一些副作用:

我创造了: - 一个名为MasterAcitity的活动,从我的应用中的每个活动扩展而来。清单中的应用程序标记声明为

<application
        android:name="my.package.name.MyApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/ApplicationStyle" >
  • 一个名为MyApplication的类,它扩展了android.App.Application,它具有以下代码

    private static Context _context;
    
    public static Context getContext() {
        return _context;
    }
    
    public static void setContext(Context context) {
        _context = context;
    }
    
  • 在清单中,应用程序标记声明为

    <application
        android:name="my.package.name.MyApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/ApplicationStyle" >
    

MasterActivity在OnResume和OnCreate方法中执行此代码

MyApplication.setContext(this);

该应用的每项活动都会扩展MasterActivity。

app中有一个名为DialogHelper的类,它有一个静态方法

public static void showDialog(String message)

使用android.app.AlertDialog.Builder创建并使用上下文MyApplication.getContext()

显示对话框

所以从我的应用程序的任何地方我都可以使用

DialogHelper.showDialog("my message");

这种方法是否有效?或者我需要注意什么?

我怀疑是静态背景......

由于

2 个答案:

答案 0 :(得分:1)

  

这种方法会起作用吗?

使用Application进行用户界面工作有导致问题的历史记录。在给定的一组情况下使用Activity或专门的Context(例如,getThemedContext()上的ActionBargetContext()上的Presentation )。

答案 1 :(得分:0)

如果上下文属于被销毁的活动,您还应该有一个onDestroy处理程序将上下文重置为null。

而不是全局静态上下文我更喜欢像这样的api

 DialogHelper.showDialog(this.getContext(),"my message");

[5.5.2013更新]

每个活动,服务,BroadcastReceiver 都是indirectly derived from Context via ContextWrapper,其他类如视图保存并使用上下文。它们通常通过getContext()函数公开它。因此,必要时可以提供上下文。