带有服务的Android Widget(开始使用警报)经常被调用

时间:2012-10-19 10:32:44

标签: android android-widget android-alarms android-appwidget

在一个要求中,我创建了一个应该在每5分钟后更新一个小部件。我在互联网上发现,我应该使用可节省电池的AlarmManager,而不是使用java线程。现在我正在使用AlarmManager。

我面临的问题是服务类的onStart方法被非常频繁地调用。一秒钟几乎10次。听到我的两个班。

public class MyAppWidget extends AppWidgetProvider {

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
        intent = new Intent(context, UpdateWidgetService.class);
        context.startService(intent);
    }
}

服务类是

public class UpdateWidgetService extends Service {  

private Intent intent;

@Override
public void onStart(Intent intent, int startId) {
this.intent = intent;
System.out.println("This is getting printed 10 times in a second.");
final PendingIntent pending = PendingIntent.getService(getApplication(), 0, intent, 0);
AlarmManager alarm = (AlarmManager) getApplication().getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
long interval = 3000;
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending);     

stopSelf();
super.onStart(intent, startId);
 } 
}

我还在xml文件中设置属性以进行自动刷新,但没有用。该应用程序未使用以下属性刷新窗口小部件。此外,我想知道如果应用程序使用此属性,将调用哪个方法。

android:updatePeriodMillis="1000"

1 个答案:

答案 0 :(得分:0)

我建议你移动

super.onStart(intent, startId);

到你方法的开头。在您使用stopSelf()停止服务后调用它是不对的;