如何在经历生命周期破坏时关闭活动?

时间:2013-05-11 10:08:26

标签: android

关闭/完成某项活动的Android方式是什么,仍然希望它能够通过onPauseonStoponDestroy

我知道Activity.finish(),但这只能保证调用onDestroy()而不是其他两个。原因,基于android文档,数据库访问应该在onStop()中完成,因此它不会减慢用户的速度,这是我的意图,保持所有“保存”到onStop(),但是,我刚刚注意到在调用finish()时没有调用该函数...

那么..在这种情况下解决方案是什么?我的意思是,我可以创建一个boolean变量,但是有更复杂的方法吗?甚至另一种结束活动的方式,比如调用onDestory()是不正确的事情吗?

修改

抱歉,我错误地输入了该部分,我的意思是说保存到onStop()中的数据库,而不是onDestroy()

  

虽然在onStop()之前调用了onPause()方法,但是你应该这样做   使用onStop()执行更大,更密集的CPU关闭   操作,例如将信息写入数据库。

Source

2 个答案:

答案 0 :(得分:1)

调用Activity.finish确实会经历活动生命周期http://developer.android.com/training/basics/activity-lifecycle/stopping.html

onDestroy()州的文档:

  

注意:不要指望将此方法称为保存数据的地方!

onPause()州:

This callback is mostly used for saving any persistent state the activity is editing, to present a "edit in place" model to the user and making sure nothing is lost if there are not enough resources to start the new activity without first killing this one. This is also a good place to do things like stop animations and other things that consume a noticeable amount of CPU in order to make the switch to the next activity as fast as possible, or to close resources that are exclusive access such as the camera.

最后一件事,onStop()

  

请注意,在内存不足的情况下,可能永远不会调用此方法,在这种情况下,系统没有足够的内存来保持活动进程在调用onPause()方法后继续运行。

这使您只需使用 onPause()作为覆盖和执行某些保存内容的方法。它确实被称为。

在此处找到相关问题:finish() and the Activity lifecycle

答案 1 :(得分:0)

根据文档,“如果系统必须在紧急情况下恢复内存,则可能不会调用onStop()和onDestroy()。因此,您应该使用onPause()来编写关键的持久数据(例如用户编辑到存储。但是,您应该选择在onPause()期间必须保留哪些信息,因为此方法中的任何阻止过程都会阻止转换到下一个活动并降低用户体验。“< / p>

这意味着, OnPause()是数据库操作的正确方法,但如果它们太重而无法阻止UI转换,那么它们应该只在 OnStop()中完成