Android 类设计 - 每次我想显示它们时,我是否应该在我的 Activity 中重新实例化对话框类?

标签 android class-design

主要 Activity :

GeneralDialogFragment history_dialog = new GeneralDialogFragment();
public void showHistory(View view) {

    Bundle bdl = new Bundle(1);
    bdl.putString("dialog_type", "history");

    history_dialog.setArguments(bdl);
    history_dialog.show(getSupportFragmentManager(), null);
}

此代码存在于我的 Activity 中。

现在,我在犹豫要不要把定义放上去

GeneralDialogFragment history_dialog = new GeneralDialogFragment();

在 showHistory() 函数内部还是外部?

有什么区别?如果我把它放在外面,我是否在保存内存(所以它只实例化一次?)

最佳答案

您是否这样做主要取决于 fragment 的作用。创建新 Fragment 对象的开销很小,但可能会根据您需要创建的数量而增加。如果 DialogFragment 是静态的并且每秒弹出一次(你为什么要这样做?!?!),那么可能值得保留它。如果 DialogFragment 每分钟弹出一次,那么最终用户可能不会注意到您是否每次都重新创建该对象。

不过一般来说,Android (Google) 建议采用延迟加载方法。因此,如果您在该方法的开头创建对象并调用 show(),您将失去对它的引用。在应用程序的 FragmentManager 中仍然会有对它的引用,因此它会保留在内存中。一旦您调用 dismiss()Fragment 将被删除,它占用的内存将被垃圾回收。这样做会产生轻微的 CPU 开销,但可以最大限度地减少内存使用量。

如果需要为 fragment 分配大量资源,则异常(exception)。在那种情况下,加载资源一次然后保留它们是明智的。例如,图像可以更好地缓存,因为它们可能需要很长时间才能解码。它们不必保存在 Fragment 本身中,但最好将大图像保留在内存中并在创建新 Fragment 时传递给它们。

编辑: 请注意,如果您确实决定需要保留引用,最好进行检查以确保尚未显示该对话框。如果您在对话框当前打开时再次调用 showHistory(),应用程序当前将崩溃,因为您正在 Fragment 上调用 setArguments()附加到 Activity

关于Android 类设计 - 每次我想显示它们时,我是否应该在我的 Activity 中重新实例化对话框类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14985876/

相关文章:

oop - 在为其他地方的其他开发人员设计类时,您如何从想法到实现?

c++ - 从不同的类访问对象 - 设计

c# - 编写可测试的 "import data from database"类

python - 在 Python 中查找类的静态属性

android - OpenGL ES 2.0 中的等 ionic 着色器性能

android - Logcat 具有时间戳乱序的日志

java - Android导入项目失败

C++:使用友元类而不是编写 getter/setter 的错误做法?

android - 设置SeekBar的背景

java - LibGDX:如何在主游戏屏幕上重复显示/隐藏覆盖弹出菜单