实际上我知道我在询问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();
}
}
清单:
<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>
为什么内存每次都在增加?
答案 0 :(得分:14)
finish()杀死活动并释放内存......除非你有一些被泄露的引用存储...例如onRetainNonConfigurationInstance()等方法
当您按下后退按钮时,调用的是finish()方法,而不是调用onPause,onStop,onDestroy。
答案 1 :(得分:8)
默认行为是后退按钮将导致活动退出并且它将被销毁。 但是在onDestroy或onPause中显示toast不是一个好主意。它会以您不希望它发生的方式改变您的活动的生命周期。 改为使用日志记录,这样您就可以看到实际发生的情况。 BTW,finish()是你从你的代码中明确调用的东西,而onDestroy()是一个生命周期事件/方法,它会以任何方式完成/抛弃活动而被调用。
答案 2 :(得分:2)
Finish()将逐字完成您的活动,如果没有引用,GC将恢复资源。 onDestory()实际上是一个系统在销毁你的活动时会调用的方法,你应该实现这个功能。你不需要担心avout会破坏你的应用程序,android会为你做这件事。