我需要在我的应用中显示一些对话框作为调试。 编写应用程序本身的结构,以便更容易实际调用并使用静态方法从静态类中显示对话框。这些方法都指向一个更大的方法,最终处理请求。
我想要实现的是调用最终的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
来电?如果有,怎么样?提前谢谢!
答案 0 :(得分:3)
保持对Activity的静态引用不是一个好主意,因为它可能导致泄漏上下文的内存泄漏。
编辑以回答如果在onDestroy中将静态活动设置为null仍然是危险的,如先前在此回答下的评论中所述 在onDestroy中设置为null并不总是作为一种解决方法,因为如果内存不足,您可以进入Android实际上可以停留在生命周期的onPause阶段而不是命中onDestroy的状态。通常要避免保持静态上下文。
看起来showSimpleDialog已经采用了Activity参数。当您从活动中调用它时,只需传递this
或从片段传递getActivity()
即可。如果从您实现的另一个实用程序方法调用showSimpleDialog,只需将活动传递给该方法,而不是在类上设置静态Activity。