【问题标题】:Android Dialog & memoryAndroid 对话框和内存
【发布时间】:2012-10-15 12:31:17
【问题描述】:

案例 1:

public class NewEntryActivity 
{

  public void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.xxxx);


    //my_button_1 
        my_button_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final Dialog dialog = new Dialog(NewEntryActivity.this);

              dialog.setContentView(R.layout.abcabc);

              dialog.show(); 

              // On click of OK button in this dialog it will DISMISS the dialog. ( NOT remove )

            }
            }

    //my_button_2
        my_button_2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            final Dialog dialog = new Dialog(NewEntryActivity.this);

              dialog.setContentView(R.layout.xyzxyz);

              dialog.show(); 

              // On click of OK button in this dialog it will DISMISS the dialog. ( NOT remove )

            }


            }

    }
}

案例 2:

public class NewEntryActivity 
{

  public void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.xxxx);


        final Dialog dialog1 = new Dialog(NewEntryActivity.this);
        final Dialog dialog2 = new Dialog(NewEntryActivity.this);

        dialog1.setContentView(R.layout.abcabc);
        dialog2.setContentView(R.layout.xyzxyz);

        //my_button_1 
        my_button_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

              dialog1.show(); 

            }
            }

    }


}

在案例 2 中,我已经在对话框中设置了内容视图。只需单击按钮即可显示/关闭。

所以我的问题是,第一种情况会释放一些内存,还是会产生相同的效果?

【问题讨论】:

  • 每当您在该内存占用处创建对象时。案例1好!!
  • @NiravRanpara 好的,我明白了。但是 my_button_1.setOnClickListener 不是方法,它是另一个方法中的事件。那么这会有所作为吗?
  • 我的情况是,我有一个应用程序,我有大约 100 个对话框要显示。我的屏幕还同时保存了许多其他数据。所以我关心的是确保内存使用情况

标签: java android android-dialog android-memory


【解决方案1】:

这仅取决于您的应用程序消耗了多少内存,特别是在此活动中,但案例 1 似乎不错。

【讨论】:

    【解决方案2】:

    Android 的进程和内存管理有点不寻常。与 Java 和 .NET 一样,Android 使用自己的运行时和虚拟机来管理应用程序内存。与这些框架中的任何一个不同,Android 运行时还管理进程生命周期。 Android 通过在必要时停止和终止进程来为更高优先级的应用程序释放资源,从而确保应用程序的响应能力。

    每个 Android 应用程序在其自己的 Dalvik 实例内的单独进程中运行,将所有内存和进程管理责任交给 Android 运行时,它会根据需要停止和终止进程以管理资源。

    Dalvik 和 Android 运行时位于 Linux 内核之上,该内核处理低级硬件交互,包括驱动程序和内存管理,而一组 API 提供对所有底层服务、功能和硬件的访问。

    Dalvik 虚拟机 Dalvik 是基于寄存器的虚拟机,经过优化可确保设备可以高效地运行多个实例。它依赖 Linux 内核进行线程化和低级内存管理。


    这个thread 肯定会帮助你理清关于 android 内存管理的概念。
    Here 是另一个了解更多关于 android 内存分配的链接。
    祝你好运!

    【讨论】:

      【解决方案3】:

      每当您在该内存占用处创建对象时。案例1很好

      对象的数量会随着它们的创建而增加,然后随着垃圾收集器的运行而减少。

      如果即使使用垃圾回收,对象的数量仍继续增加,那么您可能存在内存泄漏。 “hprof”堆转储(何时可以通过单击 DDMS 中的按钮触发)可以帮助确定原因。

      在这里,您的问题本身就是答案,在 case2 中,对话框中已经设置了内容视图。只需单击按钮即可显示/关闭。这意味着内存已经被占用了。

      案例1很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        相关资源
        最近更新 更多