Widget + TaskKiller 中的 PendingIntent
Posted
技术标签:
【中文标题】Widget + TaskKiller 中的 PendingIntent【英文标题】:PendingIntent in Widget + TaskKiller 【发布时间】: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 如何工作,然后让它们为我的小部件及其相关通知的多个实例工作。谢谢! 【参考方案1】:有什么解决办法吗?
要求您的用户不要使用任务杀手。或者,等待一些未来的 android 版本来关闭任务杀手漏洞。
我的代码是错的还是什么 的默认行为 待定意图?
您的代码可能没问题。任务杀手使用的 hack 几乎可以摧毁一切,所以我对这种行为一点也不感到惊讶。
有什么可以避免的吗 TaskKiller 阻止我的小部件 工作吗?
不是真的。您的用户——至少不是完全白痴的用户——有望学会更多地意识到他们使用任务杀手的影响。目前,对于任务杀手级应用,没有任何合理的防御措施。
【讨论】:
【参考方案2】:当应用程序被关闭时,小部件中的未决意图不再连接到它们的活动,我也遇到了同样的问题。创建、取消和重新创建都有效,但您也可以指定取消当前标志,这样您就不必自己显式调用取消,因为系统会为您执行此操作。 当您创建待处理意图而不是使用时
PendingIntent.getBroadcast(context, 0, active, 0);
使用
PendingIntent.getBroadcast(context, 0, active, PendingIntent.FLAG_CANCEL_CURRENT);
【讨论】:
以上是关于Widget + TaskKiller 中的 PendingIntent的主要内容,如果未能解决你的问题,请参考以下文章
Flutter中的参数类型'Widget Function(BuildContext)'不能分配给参数类型'Widget Function(BuildContext,Widget)'错误