保持当前活动的有效参考

时间:2016-06-25 19:20:02

标签: android android-activity

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

我想要实现的是调用最终的Dialog(我在github上使用afollestad的Material Dialog库),这需要引用当前活动。

我实际上在类中有一个private static Activity 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();
}

总是调用catch案例。

我的问题是,是否可以避免每个活动的setActivity来电?如果有,怎么样?提前谢谢!

1 个答案:

答案 0 :(得分:3)

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

编辑以回答如果在onDestroy中将静态活动设置为null仍然是危险的,如先前在此回答下的评论中所述 在onDestroy中设置为null并不总是作为一种解决方法,因为如果内存不足,您可以进入Android实际上可以停留在生命周期的onPause阶段而不是命中onDestroy的状态。通常要避免保持静态上下文。

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