Android 保留当前活动的有效引用

Android 保留当前活动的有效引用,android,android-activity,Android,Android Activity,我需要在我的应用程序中显示一些对话框作为调试。 编写应用程序本身的结构,以便更容易从静态类使用静态方法实际调用和显示对话框。这些方法都指向一个更大的方法,该方法最终会处理请求 我想要实现的是调用一个最终对话框(我正在使用github上的afollestad提供的Material对话框库),它需要对当前活动的引用 我实际上有一个私有静态活动sActivity字段,以及相对的setActivity(Activity-Activity)方法 目前,我有自己的CustomApplication,我将其称

我需要在我的应用程序中显示一些对话框作为调试。 编写应用程序本身的结构,以便更容易从静态类使用静态方法实际调用和显示对话框。这些方法都指向一个更大的方法,该方法最终会处理请求

我想要实现的是调用一个最终对话框(我正在使用github上的afollestad提供的Material对话框库),它需要对当前活动的引用

我实际上有一个
私有静态活动sActivity字段,以及相对的
setActivity(Activity-Activity)
方法

目前,我有自己的CustomApplication,我将其称为:

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

            MyStaticClass.setActivity(activity);
        }
        [...]
}
这不符合预期,因为

try {
     Utils.showSimpleDialog(sActivity, "Error", message);
} catch (MaterialDialog.DialogException d) {
     d.printStackTrace();
}
他总是把这件事说出来


我的问题是,是否可以避免来自每个活动的
setActivity
调用?如果是,如何进行?提前感谢

保持对活动的静态引用不是一个好主意,因为它可能会导致泄漏上下文的内存泄漏

编辑以回答如果在onDestroy中将静态活动设置为null(如之前在该答案下的评论中所述)仍然危险的话 在onDestroy中设置为null并不总是作为一种解决方法,因为如果内存耗尽,您可能会进入一种状态,Android实际上可以在生命周期的onPause阶段停止,甚至不点击onDestroy。通常要避免保持静态上下文


看起来showSimpleDialog已经接受了一个活动参数。当您从活动调用它时,只需传递
this
,或从片段传递
getActivity()
。如果对showSimpleDialog的调用是从您实现的另一个实用程序方法调用的,那么只需将活动传递给该方法,而不是在类上设置静态活动