问题描述
|
实际上,我知道我在询问Android的简单和基本概念。但是我对这些
finish()
和onDestroy()
方法有些困惑。
这是否会杀死活动并释放与这些活动相关的资源?
我尝试了一个仅包含一个活动的简单应用程序。我以为这个概念就像当应用程序运行时,活动将开始。当我们单击“后退”按钮时,它将完成。并且我在每个生命周期的方法中给出了一些敬酒信息,以了解内存的使用情况。当我单击后退按钮时,它执行executed2 executed,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>
为什么每次都增加内存?
解决方法
finish()杀死活动并释放内存...除非您存储了一些泄漏的引用...例如在onRetainNonConfigurationInstance()之类的方法上
当您按下后退按钮时,所谓的finish()方法比调用onPause,onStop,onDestroy更重要。
,默认行为是后退按钮将导致活动退出并被销毁。
在onDestroy或onPause中显示吐司并不是一个好主意。它会以您不希望发生的方式改变活动的生命周期。
请改用日志记录,这样您就可以了解实际情况。
顺便说一句,finish()是您从代码中显式调用的东西,onDestroy()是生命周期事件/方法,由于以任何方式完成/删除活动而被调用。
,Finish()会从字面上完成您的活动,如果没有引用,GC将恢复资源。 onDestory()实际上是系统在破坏您的活动并且您应该实现此功能时将调用的方法。您无需担心avout会破坏您的应用程序,而android会为您完成。