コーディング中のアプリに問題があります。
ACTION_SCREEN_ON、ACTION_SCREEN_OFF、および ACTION_USER_PRESENT インテントがブロードキャストされるたびに受信する必要があるため、アプリはもちろんバックグラウンドに留まります。現時点では、私のアプリは設定アクティビティとサービスによって作成されています。ScreenReceiver は ACTION_SCREEN_* インテントを取得する BroadcastReceiver であり、UnlockReceiver は ACTION_USER_PRESENT インテントを取得します。サービスは、受信者を登録および登録解除します。
public class MainService extends Service {
ScreenReceiver screenReceiver = null;
UnlockReceiver unlockReceiver = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
doStart();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
doStart();
return START_STICKY;
}
public void doStart() {
if(screenReceiver != null && unlockReceiver != null)
return;
IntentFilter filter;
if(screenReceiver == null) {
filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
screenReceiver = new ScreenReceiver();
registerReceiver(screenReceiver, filter);
}
if(unlockReceiver == null) {
filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_PRESENT);
unlockReceiver = new UnlockReceiver();
registerReceiver(unlockReceiver, filter);
}
}
@Override
public void onDestroy() {
if(screenReceiver != null)
unregisterReceiver(screenReceiver);
if(unlockReceiver != null)
unregisterReceiver(unlockReceiver);
}
}
しかし、Android がサービスを強制終了して RAM を解放し、再起動することがあります。通常、キルからリスポーンまでの時間は約 5 秒ですが、アプリのユーザーに問題を引き起こすインテントを見逃してしまうことがあります。これらのインテントは registerReceiver を介してのみ登録できるため、マニフェストに登録できません。殺されたり、一部を失ったりせずに、どうすればそれらの意図を聞くことができますか?
ありがとう!