我是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()
这将使操作系统不太可能杀死它,但不能保证它不会。您还需要在通知栏中持续显示其正在运行的通知。
在此处阅读有关服务的信息
简而言之,您无法阻止它被杀死