1

私の一般的な質問は、バックグラウンドサービスを「INTERVAL」ごとに実行し、ANRメッセージを取得しない方法です(スレッドを開始してジョブを実行するalarmManagerから呼び出されるサービスを作成しようとしました)?助けてくれてありがとう!

より具体的に:

DropBox のようなアプリケーションを作成しています - ローカル フォルダを他の Android 携帯と共有するようにします。

このアプリケーションはバックグラウンドで実行する必要があります。

また、サーバーにアップロードするためにローカルディレクトリに作成された新しいデータがあるかどうかを確認するために、一定の時間間隔で実行する必要があります。

私のアプリケーションは一般に、 PsudoCode で次のシーケンスを実行します。

1) AlarmManager.setInexactRepeating(MySerVice)
2) (when the service is being called) DecideWhichFileToUploadOrDownload()
3) UploadNewFiles() DownloadNewFiles()

問題はステージ 3 にあることを知っています。アップロード/ダウンロードに 10 秒以上かかると、ANR メッセージが表示されます (または、アプリケーションが強制終了されます)。 . アップロード/ダウンロードを行うスレッドを作成しようとしましたが、サービスが終了すると Android がスレッドを強制終了します。

4

2 に答える 2

2

バックグラウンド サービスを「INTERVAL」ごとに実行し、ANR メッセージを取得しない方法

を使用しIntentServiceて、作業がバックグラウンド スレッドで行われるようにします。

アップロード/ダウンロードを行うスレッドを作成しようとしましたが、サービスが終了すると Android がスレッドを強制終了します。

IntentServiceAndroid はバックグラウンド スレッドと の停止の両方を管理するため、を使用する必要がありServiceます。経由で作業を送信し、 で作業をstartService()行うだけonHandleIntent()です。

于 2011-06-11T22:38:33.877 に答える
1

サービス (Alarm サービスによって呼び出される) が長時間の実行や非同期を必要とする可能性があることを忘れないでください。

および WakeLock (PowerManager を参照)

そうしないと、デバイスが「ディープ スリープ」状態に戻る/移行する可能性があります。その後、CPU の状態は次の「イベント」まで
フリーズします サービスでできるだけ早く WakeLock を取得し、バックグラウンド作業の最後に必ず解放してください...

于 2011-08-16T17:20:48.663 に答える