1

コーディング中のアプリに問題があります。
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 を介してのみ登録できるため、マニフェストに登録できません。殺されたり、一部を失ったりせずに、どうすればそれらの意図を聞くことができますか?

ありがとう!

4

1 に答える 1

0

殺されたり、一部を失ったりせずに、どうすればそれらの意図を聞くことができますか?

あなたはそうしない。これらのブロードキャストを使用しないように、またはブロードキャストが欠落している場合の回復力を高めるように、アプリを書き直します。結局のところ、「Android がサービスを強制終了して RAM を解放してから再起動する」だけではなく、サービスを削除できるタスク マネージャーなどもあります。

于 2012-06-10T12:00:08.127 に答える