【问题标题】:How to make broadcast receiver always alive? (for battery widget)如何使广播接收器始终处于活动状态? (用于电池小部件)
【发布时间】:2012-06-11 19:02:26
【问题描述】:

我是 Android 新手。我想创建一个显示当前电池电量的小部件。在阅读了几个教程后,我做了以下工作。创建了扩展 AppWidgetProvider 的类。在其 onUpdate 和 onEnabled 方法中,使用意图过滤器 ACTION_BATTERY_CHANGED 注册了广播接收器。在 onRecieve 方法中,TextView 使用当前电池电量进行更新。

他们在这里:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]      appWidgetIds) 
{

    ComponentName cn = new ComponentName(context, BatteryAppWidgetProvider.class);
    context.getApplicationContext().registerReceiver(this, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    appWidgetManager.updateAppWidget(cn, this.views);

}


@Override
public void onReceive(Context context, Intent intent) {

        Integer level = intent.getIntExtra("level", -1);
        this.views.setTextViewText(R.id.battery_level, level.toString() + "%");
        ComponentName cn =
            new ComponentName(context, BatteryAppWidgetProvider.class);
        AppWidgetManager.getInstance(context).updateAppWidget(cn, this.views);

    super.onReceive(context, intent);
}

@Override
public void onEnabled(Context context) {
    super.onEnabled(context);
    context.getApplicationContext().registerReceiver(this, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}

它可以工作一段时间 - 我可以在 DDMS 中看到它。但是经过一段时间或在我启动了许多其他应用程序之后。我的进程从 DDMS 中消失了。我认为Android只是删除它以释放更多内存。所以问题是我怎样才能避免这种情况?我怎样才能让我的流程永远活着?

【问题讨论】:

    标签: android android-intent android-widget battery


    【解决方案1】:

    如果您希望 android 在用户不与小部件/应用程序交互时执行某些操作,您应该使用服务。

    Android Service

    它适用于不需要用户交互的任务,特别适合反复检查某些内容。不能保证操作系统最终仍然不会杀死它,但它会尽可能长时间地存活。

    【讨论】:

    • 乔尔,@tyczj 感谢您的回复!不知道这是否是一个好方法,但我所做的是在 onUpdate 和 onEnabled 方法中注册 Timer 。每个 10 秒计时器注册广播接收器并更新小部件(在计时器 Run 方法中)。除此之外,我没有删除 onReceive 和 onEnabled 方法。还没有正确测试它。但它看起来很有效。
    【解决方案2】:

    唯一可以避免这种情况的方法是,如果您启动服务并使用startForeground(),这将降低操作系统杀死它的可能性,但不能保证它不会杀死它。您还需要在通知栏中持久显示通知,表明它正在运行。

    阅读服务here

    总之你无法阻止它被杀死

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多