1

我开发了一个应用程序(称为即时按钮),该应用程序具有小部件功能。此小部件将 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 阻止我的小部件工作的东西吗?

问候。

4

2 回答 2

7

有什么解决办法吗?

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

我的代码是错误的还是什么,或者它是 PendingIntent 的默认行为?

你的代码大概没问题。任务杀手使用的黑客攻击几乎消灭了一切,所以我对这种行为一点也不感到惊讶。

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

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

于 2010-04-24T21:57:14.720 回答
0

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

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

利用

PendingIntent.getBroadcast(context, 0, active, PendingIntent.FLAG_CANCEL_CURRENT);
于 2014-10-17T21:27:49.947 回答