onDestroy() 或 finish() 是否真的会终止该活动?
其实我知道我在问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>
为什么内存每次都会增加?
Actually I know i am asking about the simple and basic concept of Android. But I am a little bit confused about these finish()
and onDestroy()
methods.
Whether this will kill the activity and free the resources associated with these activity?
I tried with a simple application which contains only one activity. I thought the concept is like When the application runs, the activity will start. and when we click on back button, it will finish. And I gave some toast message inside each life cycle methods for knowing the memory usage . And when I clicked on the back button it executed onPause()
, onStop()
, and onDestroy()
. I thought this activity finished. But when i relaunched the application again, then it took more memory than the previous time. This happens every time when I run the app from eclipse or relaunch the application from home screen.
Why is it happening? How can i actually destroy the application / activity to free the memory?
I am including my code. I just give only one toast message inside the class. Then also memory usage is increasing.
Each time when I run the application the allocated size is increasing like : 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();
}
}
manifest:
<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>
Why is the memory increasing every time?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
finish() 会终止活动并释放内存...除非您存储了一些泄漏的引用...例如 onRetainNonConfigurationInstance() 等方法
当您按下后退按钮时,调用的是 finish() 方法调用 onPause、onStop、onDestroy。
The finish() kills the activity and releases memory... unless you have some reference stored that is leaked... for example on methods like onRetainNonConfigurationInstance()
When you press the back button what is called is the finish() method that than calls onPause, onStop, onDestroy.
默认行为是后退按钮将导致 Activity 退出并被销毁。
不过,在 onDestroy 或 onPause 中显示 toast 并不是一个好主意。它将以您不希望发生的方式改变您的活动的生命周期。
使用日志记录代替,这样您就会看到到底发生了什么。
顺便说一句, finish() 是您从代码中显式调用的东西,而 onDestroy() 是一个生命周期事件/方法,它会因以任何方式完成/销毁活动而被调用。
The default behavior is that back button will cause the activity to exit and it'll be destroyed.
Displaying a toast in onDestroy or onPause is not a good idea though. It'll alter the lifecycle the of your activity in a way you don't want it to happen.
Use logging instead, so you'll see what's really happening.
BTW, finish() is something that you call explicitly from your code and onDestroy() is a lifecycle event/method which gets called as a result of finishing/destoying the activity in any way.
Finish() 将真正完成您的活动,如果不存在引用,GC 将回收资源。 onDestory() 实际上是系统在销毁你的 Activity 时会调用的一个方法,你应该实现这个函数。您无需担心会破坏您的应用程序,Android 会为您做到这一点。
Finish() will literally finish your activity and if no references are present a GC will recover resources. onDestory() is actually a method that the system will call when it is destroying your activity and you are supposed to implement this function. You dont need to worry avout destroying your app , android does it for you.