我刚被一个小部件烧毁了。我可以看到问题的原因,但我无法确定原因或解决方案。我的小部件发出了一个搜索(SearchManager),活动启动了一个搜索对话框,但当它回调到我的小部件时,它创建了另一个对小部件的引用(即,thread-id是相同的,但是widget-id从65变为0)。
这让我相信创建了一个新实例,并在文档中搜索了适用于该问题的设置。最后,我偶然发现了android:launchMode="singleTop"
,一旦我在AndroidManifest中设置它,中提琴!我的小部件工作了。
这花了我两天的时间来调试。
还有其他任何情况,或者我的问题是否有更技术上更正确的答案?
答案 0 :(得分:38)
我在Android Docs中做了更多的阅读 - 我可以花一辈子阅读他们的文档并找到一个新的细微的细节让我大脑崩溃:)这解释了我的多个实例,我没想到,但是,我配置发生
Android Doc on Activity definition for AndroidManifest.xml
“标准”和“单击”模式 只有一个彼此不同 尊重:每次有新的意图 对于“标准”活动,新的 创建类的实例 回应这个意图。每个实例 处理单一意图。同样,a “singleTop”活动的新实例 也可以创建来处理新的 意图。但是,如果是目标任务 已经有一个现有的实例 堆栈顶部的活动, 该实例将收到新的 intent(在onNewIntent()调用中);一个 未创建新实例。其他 情况 - 例如,如果是 现有的“singleTop”实例 活动是在目标任务中,但是 不在堆栈的顶部,或者如果 它位于堆栈的顶部,但不在 目标任务 - 一个新实例 被创建并推入堆栈。