2010-04-24 38 views
1

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

我的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阻止我的小工具工作?

问候。

+0

我没有任何任务杀手的问题,但你的代码是我需要什么弄清楚如何PendingIntents工作然后让它们为我的小部件的多个实例及其关联的通知工作。谢谢! – gordonwd 2012-05-04 16:12:12

回答

7

有没有解决方案?

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

是我的代码错了,要么就是它的 的 的PendingIntent的默认行为?

你的代码可能很好。任务杀手使用的黑客几乎可以清除所有的东西,所以我对这种行为并不感到惊讶。

有什么我可以使用,以避免 的TaskKiller从 停止我的小部件的工作?

不是。你的用户 - 那些至少不是完全愚蠢的人 - 有希望学会更多地意识到他们使用任务杀手的影响。目前,没有明智的防御任务杀手应用程序。

0

我有同样的问题,在应用程序被解雇时,一个小部件中的挂起的意图不再连接到他们的活动。创建,取消和重新创建工作,但您也可以指定取消当前标志,以便您不必显式调用取消,因为系统会为您执行取消。 当您创建挂起的意图,而不是使用

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

使用

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