【发布时间】:2015-04-10 12:02:15
【问题描述】:
我有两个活动;假设 A 和 B。在 activity A 中注册了一个广播接收器,它监听将完成活动 A 的特定事件。我在 onCreate() 中注册广播接收器,并在 activity A 的 onDestroy() 中销毁它.
为简单起见,activity B 中有一个button,名为“Destroy Activity A”。当用户点击button时,activity A应该被销毁。
通常这一切都运行顺利,没有任何问题,但问题出现在以下情况:
1) 假设我在activity B 并按下 Home 键将应用程序移至后台,那么如果我使用其他资源密集型应用程序,Android 系统将终止我的应用程序以释放内存。然后如果我从最近的任务中打开我的应用程序,activity B 将被恢复,它的onCreate()、onResume() 等方法将被调用。现在我按button 来销毁activity A,但是活动A 已经被销毁,所以activity A 的onCreate()、onResume() 等方法将不会被调用,除非我通过按去activity A back button。因此broadcast receiver 没有注册监听事件。
2) 当用户在设备设置的开发者选项中选择“不保留活动”时,也会出现同样的问题。
我一直在寻找解决这个问题很长时间,但我无法找到正确的答案。处理这种情况的最佳方法是什么?这是一个Android错误吗?这个问题应该有一些解决方案。
请帮帮我。
【问题讨论】:
-
...注册了广播接收器,用于侦听将完成活动 A...的特定事件... - 如果活动已被销毁(在您提到的场景中) 注册该接收器以获取将完成该活动的事件的目的是什么?除了终止活动之外,您是否还在做一些额外的事情?
-
如果
A被操作系统破坏了会有什么问题? -
当我按下返回按钮时,如果我从“活动 B”中按下“销毁活动 A”,我不想看到活动 A。
-
无论这里真正的问题是什么,都应该使用其他技术来处理,例如
Intent标志或<activity>属性来帮助控制后台堆栈。如果你有一个活动试图破坏另一个活动,那么你做错了。
标签: android android-activity broadcastreceiver android-lifecycle back-stack