onDestroy()或finish()实际上是否会杀死活动?

Jom*_*mia 6 android memory-management activity-lifecycle ondestroy

其实我知道我在询问Android的简单和基本概念.但我对这些finish()onDestroy()方法有点困惑.这是否会破坏活动并释放与这些活动相关的资源?

我尝试了一个只包含一个活动的简单应用程序.我认为这个概念就像应用程序运行时,活动将开始.当我们点击后退按钮时,它将完成.我在每个生命周期方法中给出了一些toast消息,以了解内存使用情况.而当我点击后退按钮就执行onPause(),onStop()onDestroy().我以为这个活动结束了.但是当我再次重新启动应用程序时,它的内存比以前多了.每当我从eclipse运行应用程序或从主屏幕重新启动应用程序时,都会发生这种情况.

为什么会这样?我怎么能真正破坏应用程序/活动以释放内存?


我包括我的代码.我只在课堂上给出一个吐司留言.然后内存使用量也在增加.

每次运行应用程序时,分配的大小都会增加,如:3302744,3442384,3474552

 public class myActivity extends Activity
   {
         @Override
         public void onCreate(Bundle savedInstanceState)
         {
             super.onCreate(savedInstanceState);     
        Toast.makeText(getBaseContext()," allocated size  = " + Debug.getNativeHeapAllocatedSize(), 1).show();      
         }

   }
Run Code Online (Sandbox Code Playgroud)

表现:

<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".myActivity "  
                  android:label="@string/app_name"  >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> 
 </application>
Run Code Online (Sandbox Code Playgroud)

为什么每次都会增加内存?

net*_*ein 17

finish()杀死活动并释放内存......除非你有一些被泄露的引用...例如onRetainNonConfigurationInstance()等方法

当您按下后退按钮时,调用的是finish()方法,而不是调用onPause,onStop,onDestroy.

  • +1用于在非常少的句子中传达如此多的关键信息.简洁而准确的艺术. (5认同)

use*_*463 9

默认行为是后退按钮将导致活动退出并且它将被销毁.但是在onDestroy或onPause中显示toast不是一个好主意.它会以您不希望它发生的方式改变您的活动的生命周期.改为使用日志记录,这样您就可以看到实际发生的情况.BTW,finish()是你从代码中明确调用的东西,而onDestroy()是一个生命周期事件/方法,它以任何方式完成/抛弃活动而被调用.