1

これが重複している可能性があることは知っていますが、これに対する具体的な答えが見つかりませんか? (ウィジェットを強制的に毎秒更新する方法については部分的な回答がありますが、私が求めているのはそれだけではありません...)

  1. 1 分に 1 回更新されるウィジェットが必要です。

  2. この目的のためにバッテリーと CPU と RAM を効率的にするウィジェットを作成するにはどうすればよいですか? (データはインターネットから取得され、ユーザーに表示される前に解析されます (少量のデータと処理が実行されます。))

  3. ユーザーが画面にウィジェットを表示し、ウィジェットを更新するサービスを起動するアラーム マネージャーをそのサービスにスケジュールさせる場合、BOOT で実行されるサービスを作成する必要がありますか?

また、バッテリーを節約するために画面がロックされているかオフになっている場合は、このサービスを一時停止したいと思います...

4

1 に答える 1

1

それはまさに私が似たようなことをした方法です。サービスを作成し (IntentService複雑なものが必要ない場合)、それをアラーム マネージャーに登録します。

long interval = intervalMinutes * 60 * 1000;
long firstTime = Calendar.getInstance().getTimeInMillis();

Intent i = new Intent(ctx, AlarmService.class);
// Use the widget ID to update only one widget at a time.
i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
PendingIntent mAlarmSender = PendingIntent.getService(ctx, id, i, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager am = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, firstTime, interval, mAlarmSender);

Service または IntentService の AlarmService.class であること。

起動イベントでは、アラームを登録できるアクションを作成しBroadcastReceiverて管理できます。android.intent.action.BOOT_COMPLETED

でそのイベントに登録できますAndroidManifest

<receiver android:name=".BroadcastReceiverWidget" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
于 2013-08-28T07:40:54.700 に答える