如何使广播接收器始终处于活动状态?(用于电池小部件)



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

他们在这里:

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 在用户不与小部件/应用程序交互时执行某些操作,则应使用服务。

安卓服务

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

可以

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

在此处阅读有关服务的信息

简而言之,您无法阻止它被杀死

最新更新