1

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

我创建了: - 一个名为 MasterAcitity 的 Activity,从我的应用程序中的每个 Activity 扩展而来。清单中的应用程序标签声明如下

<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。

应用程序中有一个名为 DialogHelper 的类,它有一个静态方法

public static void showDialog(String message)

用于android.app.AlertDialog.Builder创建和显示使用上下文的对话框MyApplication.getContext()

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

DialogHelper.showDialog("my message");

这种方法行得通吗?或者我需要注意什么?

我的疑问在于静态上下文...

谢谢

4

2 回答 2

1

这种方法行得通吗?

使用Applicationfor UI 作品有导致问题的历史。对于给定的一组情况(例如,on ,on a )使用 anActivity或 a special 。ContextgetThemedContext()ActionBargetContext()Presentation

于 2013-05-04T18:41:57.890 回答
0

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

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

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

[2013 年 5 月 5 日更新]

每个 Activity、Service 、BroadcastReceiver都是通过 ContextWrapper和 Views 等其他类间接派生自 Context 并保存和使用 Context。他们通常通过 getContext() 函数公开它。因此,上下文应该在必要时可用。

于 2013-05-04T18:46:43.337 回答