这个问题的目的是向社群询问我为我的应用程序采取的方法是否正确或可能有一些副作用:
我创造了: - 一个名为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");
这种方法是否有效?或者我需要注意什么?
我怀疑是静态背景......
由于
答案 0 :(得分:1)
这种方法会起作用吗?
使用Application
进行用户界面工作有导致问题的历史记录。在给定的一组情况下使用Activity
或专门的Context
(例如,getThemedContext()
上的ActionBar
,getContext()
上的Presentation
)。
答案 1 :(得分:0)
如果上下文属于被销毁的活动,您还应该有一个onDestroy
处理程序将上下文重置为null。
而不是全局静态上下文我更喜欢像这样的api
DialogHelper.showDialog(this.getContext(),"my message");
[5.5.2013更新]
每个活动,服务,BroadcastReceiver 都是indirectly derived from Context via ContextWrapper,其他类如视图保存并使用上下文。它们通常通过getContext()函数公开它。因此,必要时可以提供上下文。