在我的应用程序中,当我按下主屏幕按钮时,该活动会调用onDestroy()
方法。 按理说应该只调用onPause()
方法,对吧?
为什么会发生这种情况呢?
在我的应用程序中,当我按下主屏幕按钮时,该活动会调用onDestroy()
方法。 按理说应该只调用onPause()
方法,对吧?
为什么会发生这种情况呢?
同时请检查您在清单文件中的Activity是否使用了android:noHistory标记
文档: android:noHistory 该属性决定当用户离开并不再显示该Activity时,该Activity是否应该从Activity堆栈中移除并且调用其finish()方法以结束它。
noHistory="true"
不会调用 finish()
。我在 onPause
和 onStop
中打印了 isFinishing
,但两者都显示为 false
。finish()
没有被调用吗? - starriet这取决于您的手机有多少内存,如果您的手机内存不足,那么它将立即销毁该活动以释放资源。在新手机上,这种情况不会发生,因为它们有足够的备用内存。
onDestroy()
:
此外,请注意,在调用这可能是因为活动正在结束(有人在其上调用了finish()),或者因为系统暂时销毁此活动实例以节省空间。您可以使用isFinishing()方法区分这两种情况。
onStop()
后,系统可以在不调用onDestroy()
的情况下“杀死”您的程序。因此,任何清理/数据持久化代码都应位于onPause()
或onStop()
中。好的,这取决于很多因素。如果您在Android 3.2+设备上遇到此问题,则应将screenSize属性添加到android:configChanges中。
android:configChanges="keyboardHidden|orientation|screenSize"
onPause()
时,您的活动是否调用了finish()
。
android:noHistory
默认值为false
。 - jordanpgnoHistory="true"
并不会调用finish()
。我在onPause
和onStop
中打印了isFinishing
,但两者均显示为false
。我检查有误吗? - starriet