代码之家  ›  专栏  ›  技术社区  ›  YaW

窗口小部件中的挂起内容+任务杀手

  •  1
  • YaW  · 技术社区  · 14 年前

    我开发了一个应用程序(称为即时按钮),这个应用程序有一个小部件功能。此小部件使用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类执行一些操作来复制声音。

    我从一些用户那里得到报告,这些小部件在一段时间后就停止工作了,通过一些研究,我发现这是因为任务杀手。当你在任务杀手中杀死应用程序时,挂起的内容会从内存中删除,所以当你点击这个小部件时,它不知道该怎么做。

    有什么解决办法吗?我的代码是错误的还是什么,或者它是挂起内容的默认行为?有什么可以用来避免任务杀手阻止我的小部件工作吗??

    问候语。

    2 回复  |  直到 10 年前
        1
  •  7
  •   CommonsWare    14 年前

    有什么解决办法吗?

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

    我的代码是错的还是什么 的默认行为 PendingIntent?

    您的代码可能很好。杀手们使用的黑客技术几乎可以清除所有的东西,所以我对这种行为一点也不感到惊讶。

    有什么我可以避免的吗 阻止我的小工具的任务杀手 工作?

    不是真的。你的用户——至少是那些完全不是白痴的人——希望能学会更多地了解他们使用任务杀手的影响。目前,没有针对任务杀手应用程序的合理防御。

        2
  •  0
  •   MerryMary    10 年前

    我也遇到过同样的问题:当应用程序被取消时,小部件中的待定意图不再与他们的活动连接。创建、取消和重新创建工作正常,但是您也可以指定取消当前标志,这样您就不必像系统为您做的那样显式地调用Cancel Yourself。 当您创建待定的意图而不是使用

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

    使用

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