2012-06-11 29 views
1

我是Android新手。我想创建一个显示当前电池电量的小部件。阅读了几个教程后,我做了以下。创建了扩展AppWidgetProvider的类。在其onUpdate和onEnabled方法中注册了具有意向过滤器ACTION_BATTERY_CHANGED的Broadcast reciever。在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只是删除它以释放更多内存。所以问题是我该如何避免这种情况?我怎样才能让我的过程永远活着?

回答

2

如果你想使用Android当用户不与小部件/应用程序交互做点什么阻止它,你应该使用一项服务。

Android Service

它旨在用于不需要用户交互,是一遍又一遍检查什么特别大的任务。不能保证OS最终不会杀死它,但它会尽可能长时间保持活力。

+0

Joel,@tyczj谢谢您的回应!不知道它是否是一个好的方法,但我所做的是在onUpdate和onEnabled方法中注册Timer。每10秒定时器注册广播接收器和更新小部件(在定时器运行方法中)。除此之外,我没有删除onReceive和onEnabled方法。没有正确测试它。但它看起来像在工作。 –

1

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

上服务读了here

总之你不能被杀死

相关问题