【发布时间】:2017-11-22 08:40:38
【问题描述】:
我在我们的代码中发现了一个错误,我们正在通过
启动活动(我们称之为 SCREEN_ACTIVITY)Intent intent = new Intent(SharedIntents.INTENT_SCREEN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Android 文档:使用 FLAG_ACTIVITY_NEW_TASK 时,如果您正在启动的 Activity 的任务已经在运行,则不会启动新的 Activity;相反,当前任务将简单地以其上次所处的状态被带到屏幕的前面。
所以在大多数情况下一切正常。
当用户点击某物时,该屏幕活动将调用finish()。此外,此屏幕活动将通过来自服务的传入事件启动或创建。
6053 I/ScreenActivity(15395): onCreate
6682 E/ScreenActivity(15395): finish() Activity
6832 I/ScreenActivity(15395): onDestroy
7284 I/ScreenActivity(15395): onCreate
7911 E/ScreenActivity(15395): finish() Activity
8063 I/ScreenActivity(15395): onDestroy
10555 I/ScreenActivity(15395): onCreate
13413 E/ScreenActivity(15395): finish() Activity
13701 I/ScreenActivity(15395): onCreate
13799 I/ScreenActivity(15395): onDestroy
最后一个是问题。 ScreenActivity 被创建,然后调用 finish() 本身。但问题是 onDestroy 被调用得很晚。在此之前有来自服务器的传入事件并调用 startActivity() 会触发一个新的 ScreenAcitivty onCreate()。问题是 ScreenManager 类为创建和销毁的活动保留标志。
该标志在 onCreate() 回调和 onDestroy() 回调时设置。 所以对于第 10555 和 13701 行,ScreenManager 设置 createFlag = true。对于第 13799 行,设置 createFlag = false。 在第 13799 行之后发生的事件将假定未创建活动并且未将事件通知给活动。
希望我对这个问题的描述对您来说很清楚。 这种场景 onStop() 和 onDestroy() 在调用 finish() 之后调用这么晚吗?如果是,我必须考虑解决方案。 如果没有,那有什么地方可以修改吗?
非常感谢。
【问题讨论】: