代码之家  ›  专栏  ›  技术社区  ›  mobibob

何时有必要在Android小部件或应用程序中使用单重启动模式?

  •  24
  • mobibob  · 技术社区  · 14 年前

    我刚被一个小部件烧坏了。我可以看到问题的原因,但我无法确定原因或解决方法。我的小部件发布了一个搜索(SearchManager),活动启动了一个搜索对话框,但当它调用我的小部件时,它创建了对小部件的另一个引用(即线程ID相同,但小部件ID从65变为0)。

    这使我相信正在创建一个新的实例,我在文档中搜索将应用于该问题的设置。最后,我偶然发现 android:launchMode="singleTop" 一旦我把它放在仙女座舱单上,维奥拉!我的小部件工作了。

    这花了我两天时间来调试。

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

    1 回复  |  直到 9 年前
        1
  •  38
  •   RevanthKrishnaKumar V. Glen Best    9 年前

    我在android文档中做了更多的阅读——我可以花一辈子的时间阅读他们的文档,并找到一个新的让我大脑崩溃的微妙细节:)这解释了我的多个实例,但我并没有想到会发生。

    Android Doc on Activity definition for AndroidManifest.xml

    “标准”和“单顶”模式 在一个方面彼此不同 尊重:每次有新的意图 对于“标准”活动,新的 类的实例创建为 对这个意图作出回应。每个实例 处理单一意图。类似地,A “单一”活动的新实例 也可以创建以处理新的 意图。但是,如果目标任务 已有的实例 其堆栈顶部的活动, 该实例将接收新的 意图(在onNewIntent()调用中);a 未创建新实例。在其他 例如,如果 “singletop”的现有实例 活动在目标任务中,但是 不在栈顶,或者如果 它在一堆东西的顶部,但不在 目标任务“新实例”将 在堆栈上创建和推送。