3

メソッド「exampleMethod()」を介してアクティビティと通信するBroadcastReceiverを備えたサービスがあります。このサービスは起動して正常に動作しますが、しばらくすると Android によって停止され、再起動する必要があります。サービスが長期間停止していないことを確認することは可能ですか?

public class SMS_Service extends Service{
    private BroadcastReceiver rec_sms = new BroadcastReceiver() {   
        @Override
        public void onReceive(Context context, Intent intent) {
               MainActivity.exampleMethod();
        }
    };

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }
4

1 に答える 1

2

しばらくすると Android によってサービスが停止されます

最初に重要なことは、Android システムによってサービスが停止された理由です。

ユーザーがそのプロセスのコンポーネント (つまりアクティビティ) と直接対話している場合、Android はそのプロセスを実行し続けようと非常に懸命に努力しますが、異常な状況を除いてプロセスが強制終了されることはありません。

  • メモリ不足が原因である場合は、何もできません。メモリのために何かを強制終了すると、プロセス全体 (アプリケーション オブジェクトを含む) が強制終了され、この時点ではコードは実行されません。

  • 実行する必要がなくなったためにサービスが破棄されている場合、その onDestroy() が呼び出され、後でサービスが必要になったときに新しいインスタンスが作成され、 onCreate() が呼び出されます。

サービスが長時間停止しないようにすることはできますか?

これは不可能です。あなたが得ることができる最も近いものは startForeground() 経由ですが、それでさえあなたのサービスが永遠に存続することを保証するものではありません.

さらに、これは Android の重大なアンチパターンです。ユーザーは永久に実行しようとするアプリケーションを嫌います。そのため、タスク キラーなどと戦わなければなりません。

于 2012-12-15T07:49:00.030 に答える