3

Service通知を受け取るために、サーバーへの永続的な接続を維持する必要がある があります。アプリがサーバーからメッセージを時間どおりに取得することが重要です。

接続がローカル ネットワークにあり、電話がインターネットに接続されていない可能性があるため、GCM プッシュを使用できません。サービス内で永続的な接続を維持する際のバッテリーの問題についても知っていますが、ユーザーにこのオプションを選択させ、バッテリーの消耗の可能性について通知します (実際、この機能は、デバイスが常に同じ状態にある場合に主に意味があります。電源に接続されている場所)。また、Android システムがいつでも私のサービスを強制終了できること、またはユーザーがタスク キラーを使用して、その時点で実行されているすべてのサービスを削除できることも知っています。

そうは言っても、AlarmManager定期的に を使用して実行中かどうかを確認し、Service実行していない場合は再起動することを考えました。サービスが強制終了された後でもサーバーはメッセージを送信できますが、AlarmManager.

私の質問は基本的に、メッセージを時間通りに確実に受け取るためのより良い戦略があるかどうかです。

これまでのところ、私が見つけることができるすべての関連情報は、恒久的なサービスを避けて他のものを使用することを意味していますが、ユースケースの性質上、他に選択肢はありません.

4

2 に答える 2

2

wifi接続状態や起動など、任意の数のデバイスブロードキャストでブロードキャストレシーバーをセットアップすることを検討できます。

<receiver android:name=".receivers.BootReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <receiver android:name=".receivers.WifiReceiver">
        <intent-filter>
            <action android:name="android.net.wifi.STATE_CHANGE" />
        </intent-filter>
    </receiver>
于 2013-04-29T09:44:20.883 に答える
1

サービスをフォアグラウンド サービスとして設定します (これを参照してください)。Android は、極端な状況でのみこのサービスを停止します。サービスが誤ってクラッシュした場合でも、サービスを再起動するための「セーフティ ネット」としてアラーム マネージャを使用できます。これはあなたができる最善のことです。100%のものはありません。

于 2013-04-29T10:04:52.093 に答える