1 つの要件では、5 分ごとに更新する必要がある 1 つのウィジェットを作成しました。Javaスレッドを使用する代わりに、バッテリーを節約するAlarmManagerを使用する必要があることをインターネットで見つけました。現在、AlarmManager を使用して実行しています。
私が直面している問題は、 Service クラスの onStart メソッドが非常に頻繁に呼び出されることです。1秒間に約10回。聞くのは私の2つのクラスです。
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"