我的应用程序是使用标签启动的,并根据标签中包含的信息进一步继续。现在我的应用也可以通过触摸图标启动,稍后它会要求用户触摸标签。小流量如下。
因此MainActivity可能包含标记数据(如果从TagProcessorActivity启动),或者可能不包含数据(如果从图标启动开始)。数据作为意图额外值从TagProcessorActivity传递到IconLaunchActivity,然后传递给MainActivity。主要活动后,应用程序操作继续。当我离开主要活动时,我以前的所有活动都会完成。我检查了每个活动的onDestroy()。现在,如果我在MainActivity之后注销,(仅注销一项关闭所有现有活动的功能),并从最近的应用程序重新启动我的应用程序,我的标签详细信息仍会出现在MainActivity中,我不知道为什么。
为了更明确我的问题是:
1)为什么被销毁的活动仍包含上次发布的信息。
2)我知道removeExtra()方法,但有一些更好的选择来解决这个问题。
3)尽管如此,我的代码中是否存在一些问题,或者android是否保留了意图实例?
PS:不清楚发布哪一段代码,因此如果需要,可以随意索取代码。
答案 0 :(得分:1)
应用程序永远不会退出Android。 onDestroy只会破坏活动,而不会破坏应用程序中的任何静态变量。这些将在下次启动活动时保持其价值。这可以与其他一些功能结合使用(例如从最近的任务菜单启动,导致您启动相同的意图),这就是您将获得的行为。我经常使用的答案是检测这种情况(通过检查意图,那里有一个字段,说明这是重启还是新的),如果是,则忽略意图附加。
答案 1 :(得分:0)
从最近启动的已完成任务(与主屏幕启动器图标相对)将收到旧的Intent
,包括其附加功能,数据等。 是一种了解该功能的方法它是从最近发布的,因此您可以适当地处理Intent
。
protected boolean wasLaunchedFromRecents() {
return (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY;
}
在我的拙见中,该标志名称很差(引用“最近”列表的其他标志实际上使用了该单词,例如FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
,FLAG_ACTIVITY_RETAIN_IN_RECENTS
)并且文档从未更新以反映许多事实流行的Android设备有一个专门的按钮:
此标志通常不是由应用程序代码设置的,而是由系统为您设置的,如果从历史记录启动此活动(longpress home key)。