【问题标题】:Android starting existing app instance from WidgetAndroid 从 Widget 启动现有应用程序实例
【发布时间】:2012-06-25 03:34:32
【问题描述】:

我有一个包含多个活动的应用程序...假设用户正在浏览活动堆栈 A->B->C。然后按主页按钮。现在,当用户单击小部件时,我只想将我的应用程序的现有/当前实例带到前台。我不想要应用程序的新实例。我希望活动 C 回到前台。

我尝试将 launchMode 设置为 "singleTask" | "singleInstance",但这并不能解决我想要的要求,因为它会清除当前实例并使用活动 A 创建一个新实例。

有什么办法解决这个问题吗?

非常感谢!

【问题讨论】:

    标签: android android-activity widget instance launchmode


    【解决方案1】:

    使用“singleInstance”并不是一个好主意(有很多原因)。 这是一个更好的方法 - 来自您的小部件意图处理程序:

    Intent yourActivity = new Intent(context, YourActivity.class);
    yourActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(yourActivity);
    

    召回活动C不需要加CLEAR_TOP,但要带A或B就需要了。

    我发帖只是因为在大约 10 多个类似的帖子中没有人真正指出正确的做法。

    http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP - 最后一段。

    【讨论】:

    • 我在尝试从小部件(服务)启动活动时遇到了这个问题,这解决了!
    【解决方案2】:

    我设法找到了解决方案。我设置了专门的启动模式....

    android:launchMode="singleInstance"
    

    每次用户再次点击小部件或应用图标时,都会启动默认活动 A。要在上次所在的位置打开应用程序,请在 MainActivity 类的 onCreate() 方法中检查 isTaskRoot()。如果为 false,则调用 finish(),Activity A (MainActivity) 将不会出现,应用程序将打开到它在 Activity B 中的位置。

    【讨论】:

      【解决方案3】:

      尝试将此添加到您的意图中

      intent.setFlags( Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-29
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多