サービスを常に実行すると、CPU とバッテリーに関してコストがかかります。CPU負荷を軽減するのに役立つ可能性があると私が知っている2つのオプションがあり、可能であればそれらを使用することをお勧めします.
オプション 1: ディスプレイがオフになったらサービスを停止し、ディスプレイがオンになったらサービスを開始します。を使用してこれを実現できますBroadcastReceiver
。
public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
// stop service
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// start service
}
}
}
重要: イベントをプログラムで登録します。
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver receiver = new ScreenReceiver();
registerReceiver(receiver, filter);
オプション 2:AlarmManager
代わりに使用します。このオプションは、デバイスのスタンバイ中にもセンサー チェックを実行する必要がある場合に適しています。ただし、短い間隔 (30 分未満としましょう) には適していないという欠点があります。
public void SetAlarm(Context context) {
AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 *60 , pendingIntent);
}
おそらくマニフェストでこれが必要です:
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
注: これらは完全な/実行中の例ではありません。コード フラグメントは、適切なキーワードから始めるのに役立ちます。とにかくこれが役に立てば幸いです...乾杯!