2010-08-24 75 views
2

我正在开发一个执行一些自己的状态管理的活动。我试图区分以下情况的onResume:在Android中,如何检测我的活动恢复原因?

  1. 新推出
  2. 任务切换(home键长按)睡眠后
  3. 唤醒在同一应用程序的其他活动后
  4. 简历
  5. 方向变化

有什么在活动的意图,或其他地方,这可以帮助我区分这些?

对于好奇和一些情况下...我想保留我的内部历史堆栈上4 & 5.在案件2 & 3,我会保留当前页面,但抹去历史(允许正常后退按钮功能在这一点上接管)。案例1将初始化为活动的内部起始页面(并且可以通过onCreate的一些帮助轻松检测到)。

+0

我完全理解我没有利用Android Activity堆栈。我这样做是因为我的页面/内部活动既不是全屏(共享标题栏和按钮栏,有点类似于标签布局),但仍需要动画内容转换。基本的应用程序规范是围绕iPhone设计的,我将在游戏的后期推出Android版本,其中包括从未假定的后退按钮和方向更改等内容。 – Anm 2010-08-27 17:16:13

+0

#4的部分解决方案来自Intent.ACTION_SCREEN_ON和ACTION_SCREEN_OFF广播:http://groups.google.com/group/android-developers/msg/8493895c42adb74a?pli=1 – Anm 2010-11-26 03:07:17

回答

1

活动的意图或其他地方有什么可以帮助我区分这些吗?

项目#4与onResume(),AFAIK无关。

项目#5将通过android:configChangesonConfigurationChange()得到更好的处理,虽然你可以通过onRetainNonConfigurationInstance()回来的东西,看到“检测”,如果它通过getLastNonConfigurationInstance()是那里onResume()

其他人不只是三种情况,但可能两次,一旦你开始考虑像“被释放内存以释放RAM”这样的事情作为一种可能性。

关闭袖口,感觉就像你做了一些不幸的建筑决定一样(“内部历史堆栈...擦除历史......允许正常的后退按钮功能接管当时的情况”)。 Android是围绕许多廉价的活动而设计的,而且你似乎违反了这一规定。欢迎您这样做,但请记住,Android支持您选择的模式可能会受到限制。

+0

在阅读本文之前,我已经实现了onConfigurationChange ()挂钩来保存横切方向变化的历史记录。这似乎工作。 经过测试,你似乎对#4是正确的。 离开#1和#2,它们以相同的方式处理,清除内部历史堆栈。 至于被踢出内存,我觉得这是一个有效的情况下,清除历史堆栈和对待新的启动,它是一个新的内部历史的应用程序实例。 – Anm 2010-08-27 17:23:58