0

アクティビティとバックグラウンド サービスがあります。アクティビティからインテント経由でサービスを開始します。アクティビティが閉じられても、サービスは無期限に実行されます。しかし、ここでの問題は、タスクマネージャーからメモリをクリアすると、サービスが停止し、アクティビティが再度起動されるまで再開されないことです。メモリがクリアされた後、サービスが自動的に開始されるようにします。どうすればこれを達成できますか?助けてください。

4

2 に答える 2

0
AlarmManager service = (AlarmManager) getApplicationContext().getSystemService(
                Context.ALARM_SERVICE);
            Intent i = new Intent(this, BackgroundService.class);
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 30);
            PendingIntent pending = PendingIntent.getService(this, 0, i,
                PendingIntent.FLAG_CANCEL_CURRENT);
            service.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),30000, pending);

このコードは true です 30000 ミリ秒で backgroundService を実行します

于 2013-08-18T09:35:38.177 に答える
0

AlarmManagerを使用して、サービスの実行をスケジュールします。

メイン (ルート) アクティビティで:

@Override
public void onStop() {
    super.onStop();
    AlarmManager service = (AlarmManager) context.getSystemService(
        Context.ALARM_SERVICE);
    Intent i = new Intent(this, MyService.class);
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, 30);
    PendingIntent pending = PendingIntent.getService(this, 0, intent,
        PendingIntent.FLAG_CANCEL_CURRENT);
    service.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
        REPEAT_TIME, pending);
}

これにより、アクティビティが停止してから 30 秒後にサービスが開始されます。または、サービスが実行されているかどうかを確認して開始する BroadcastReceiver を定義することもできます。これを実現するには、単にブロードキャストを作成しますPendingIntent

その他のコードと例はAndroid Service Tutorialにあります。

于 2012-10-06T14:06:46.443 に答える