41

我刚刚被一个小部件烫伤了。我可以看到问题的原因,但我无法确定原因或解决方案。我的小部件正在发出搜索 (SearchManager) 并且活动启动了一个搜索对话框,但是当它回调我的小部件时,它创建了对小部件的另一个引用(即线程 ID 相同,但小部件 ID从 65 更改为 0)。

这使我相信正在创建一个新实例,我在文档中搜索了适用于该问题的设置。android:launchMode="singleTop"最终,当我在 AndroidManifest 中设置它时,我偶然发现了它,中提琴!我的小部件工作。

这花了我两天的大部分时间来调试。

是否还有其他情况或对我的问题有更技术上正确的答案?

4

1 回答 1

54

我在 Android Docs 中做了更多的阅读——我可以花一生的时间阅读他们的文档,并找到一个让我大吃一惊的新的微妙细节 :) 这解释了我没有预料到的多个实例,但是,我配置为发生。

关于 AndroidManifest.xml 的 Activity 定义的 Android 文档

“标准”和“singleTop”模式仅在一个方面彼此不同:每次有“标准”活动的新意图时,都会创建一个新的类实例来响应该意图。每个实例处理一个意图。类似地,也可以创建“singleTop”活动的新实例来处理新意图。但是,如果目标任务在其堆栈顶部已经有活动的现有实例,则该实例将接收新意图(在 onNewIntent() 调用中);未创建新实例。在其他情况下——例如,如果“singleTop”活动的现有实例在目标任务中,但不在堆栈顶部,或者它在堆栈顶部,

于 2010-07-19T16:51:06.250 回答