【问题标题】:android hibernation kill the app - onDestroyandroid休眠杀死应用程序-onDestroy
【发布时间】:2012-04-27 16:35:48
【问题描述】:

我在 android 2.2 上使用 API 级别 8 进行开发

我读到这篇关于 android 应用程序生命周期的文章:http://developer.android.com/reference/android/app/Activity.html 但是没有关于休眠状态以及如何正确处理它的 cmets...

当我关闭设备时(并且当我的应用程序仍在运行时)操作系统调用 onDestroy 方法... 当我打开设备时,我的应用程序从头开始,操作系统调用 onCreate 方法......

操作系统在休眠时只调用 onPause / onResume 会更好,不是吗?

我在 android 上查看了愤怒的小鸟,当设备打开时它仍然存在,它们不会立即重新加载纹理或其他任何东西......

那么怎么做呢? :)

【问题讨论】:

  • 只是推测,但您的应用程序可能由于 CPU 挂起以外的其他原因而被破坏并重新创建。例如,如果您不处理配置更改,并且方向更改可能会导致销毁/创建循环,并且每次屏幕关闭/打开时,许多设备都会(莫名其妙地)改变您的方向。

标签: android hibernate ondestroy hibernation


【解决方案1】:

您需要部分唤醒锁定,这样即使屏幕关闭,您的应用程序也能继续运行。在部分唤醒锁定中,CPU 不会进入睡眠状态,只有屏幕变暗。我认为这就是愤怒的小鸟游戏所做的。 http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

【讨论】:

  • 保持唤醒锁只是为了更快地恢复似乎是不好的做法,因为它会损害电池寿命。如果您真的坚持这样做,至少要暂停一段时间并在一段时间后释放它。
  • 是的,无限期地持有锁是个坏主意。也可以尝试保存所有的 UI 状态并进行复制,让用户感觉不到应用重启了。
  • 是的,在休眠状态下锁定它看起来不是一个好主意,我从愤怒的小鸟应用程序中读取了清单 xml 文件,他们没有使用权限“WAKE_LOCK”,所以他们似乎没有使用这种方法...
  • 我也尝试了 'getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)' 方法,也没有机会......从操作系统调用 onDestroy 方法并杀死活动
【解决方案2】:

在清单 xml 文件中添加:

  • android:launchMode="singleTask"
  • android:configChanges="keyboardHidden|orientation"

感谢克里斯和所有人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多