【问题标题】:PendingIntent in Widget + TaskKillerWidget + TaskKiller 中的 PendingIntent
【发布时间】:2011-02-11 23:22:33
【问题描述】:

我开发了一个应用程序(称为即时按钮),该应用程序具有小部件功能。这个小部件使用 PendingIntent 作为小部件的 onClick。

我的 PendingIntent 代码是这样的:

    Intent active = new Intent(context, InstantWidget.class);
    active.setAction(String.valueOf(appWidgetId));
    active.putExtra("blabla", blabla); //Some data

    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);

    actionPendingIntent.cancel();
    actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);

    remoteViews.setOnClickPendingIntent(R.id.button, actionPendingIntent);

onReceive 获取意图并使用 MediaPlayer 类做一些事情来重现声音。

我收到一些用户的报告,说这些小部件会在一段时间后停止工作,并且通过一些研究我发现是因为任务杀手。似乎当你在TaskKiller中杀死应用程序时,PendingIntent会从内存中删除,所以当你点击小部件时,它不知道该怎么做。

有什么解决办法吗?我的代码是错误的还是什么,或者它是 PendingIntent 的默认行为?有什么东西可以用来避免 TaskKiller 阻止我的小部件工作吗??

您好。

【问题讨论】:

  • 我没有任何任务杀手问题,但您的代码正是我需要弄清楚 PendingIntents 如何工作,然后让它们为我的小部件及其相关通知的多个实例工作。谢谢!

标签: android widget android-widget android-pendingintent


【解决方案1】:

有什么解决办法吗?

要求您的用户不要使用任务杀手。或者,等待一些未来的 Android 版本来关闭任务杀手漏洞。

我的代码是错的还是什么 的默认行为 待定意图?

您的代码可能没问题。任务杀手使用的 hack 几乎可以摧毁一切,所以我对这种行为一点也不感到惊讶。

有什么可以避免的吗 TaskKiller 阻止我的小部件 工作吗?

不是真的。您的用户——至少不是完全白痴的用户——有望学会更多地意识到他们使用任务杀手的影响。目前,对于任务杀手级应用,没有任何合理的防御措施。

【讨论】:

    【解决方案2】:

    当应用程序被关闭时,小部件中的未决意图不再连接到它们的活动,我也遇到了同样的问题。创建、取消和重新创建都有效,但您也可以指定取消当前标志,这样您就不必自己显式调用取消,因为系统会为您执行此操作。 当您创建待处理意图而不是使用时

    PendingIntent.getBroadcast(context, 0, active, 0);
    

    使用

    PendingIntent.getBroadcast(context, 0, active, PendingIntent.FLAG_CANCEL_CURRENT);
    

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多