1

Gmail クライアントでメールを受信したときに、GmailService クラスでメソッド CippaLippa() を実行したいと考えています。

私は AndroidManifest に受信機とサービスを持っています...

    <receiver
        android:name="com.myapp.receiver.GmailReceiver">
        <intent-filter>
            <action
                android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <service
        android:name="com.myapp.service.GmailService"
        android:label="@string/app_name" />

そしてこれらのクラス...

public class GmailReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, final Intent intent) {


        final SharedPreferences preferences = context.getSharedPreferences("myapp.prefs", 0);

        context.startService(new Intent(context, GmailService.class));
    }
}


public class GmailService extends Service { .. etc...}

私の質問:すべてが数時間正常に動作し、Gmail から通知を受け取ると、CippaLippa() メソッドが起動します... その後、数時間後に Gmail 通知を受け取ると、CippaLippa() メソッドは起動しなくなります。

おそらく、GmailService クラスに「生き続ける」ように指示し、Gmail イベントを監視し続ける方法はありますか? これは、アクティビティではなくバックグラウンド サービスであるため、未使用のクラスを強制終了する Android OS が原因ではないと思います。私には手がかりがありません。

4

3 に答える 3

1

次のコードは、アラーム マネージャーをすぐに開始し (PendingIntent を起動)、60 秒ごとにタスクを実行します。

    Intent logReader = new Intent();
    logReader.setClassName("com.foo.Test", "com.foo.Test.MyServiceClass");
    logReaderPI = PendingIntent.getService(context, 0, logReader, 0);
    long firstTime = SystemClock.elapsedRealtime();
    AlarmManager aMgr =  (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    aMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 60 * 1000, logReaderPI);
于 2011-04-05T15:26:07.710 に答える
0

START_STICKYをご覧ください。これで問題が解決するかどうかはわかりませんが、サービスの継続に役立つ可能性があります。

于 2011-04-05T07:00:18.940 に答える
0

システムがサービスを強制終了しているのはあなたの言うとおりです。ウィジェットに関連付けられたサービスでも同じ問題が発生しました。30分ごとに更新することで解決しました。

そのため、サービスをウェイクアップするために時々何らかのイベントをスケジュールすると、サービスは稼働し続けるはずです。

ただし、より良い解決策があるかもしれません。

于 2011-04-05T07:00:26.067 に答える