【问题标题】:Incorrect PendingIntent being launched after home key press按下主页键后启动不正确的 PendingIntent
【发布时间】:2011-11-01 10:42:03
【问题描述】:

我有两个(或更多)小部件,例如A 和 B,它们应该启动相同的活动,将 appWidgetId 中的 Intent 附加信息传递给活动。在从任何小部件首次启动应用程序安装后,这工作正常(活动收到正确的appWidgetId)。如果我在活动启动后按下后退按钮并从不同的小部件启动活动,它也可以正常工作。但是,如果我从小部件 A 启动活动,点击主页按钮,然后从小部件 B(或 C 或 D ...)启动活动,它将使用 A 的appWidgetId 启动。我很困惑如何解决这个问题。这是我声明我的PendingIntent的方式:

Intent intent = new Intent(context, WidgetActivity.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setAction(this.getClass().getName() + System.currentTimeMillis());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 
                                         PendingIntent.FLAG_UPDATE_CURRENT);

如果我理解正确,我成功地为每个小部件设置了唯一的 PendingIntents。非常感谢任何帮助!

编辑: 接受this question 的答案表明:

我认为问题在于您的 PendingIntent 仅存在额外差异。 PendingIntents 是缓存的,所以如果你使用两个具有相同操作和数据的,它们会相互覆盖。

但是,我的代码创建了要执行的随机操作,因此我认为我的 PendingIntent 的不同之处不仅仅是额外的

【问题讨论】:

    标签: android android-pendingintent


    【解决方案1】:

    看来我需要重新审视我的活动生命周期事件。答案是将以下代码放入我的活动中:

    @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
        super.onNewIntent(intent);
    }
    

    问题在于,在按下 Home 按钮时,Activity 会保留启动它的原始 Intent。然后,当另一个小部件启动 Activity 时,原来的意图被重用了。上面的代码只是用新的意图替换了原来的意图,并继续剩余的生命周期事件。

    【讨论】:

    • @Lars,太好了!我花了很长时间试图解决这个问题,很高兴看到其他人从我的经验中受益:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多