1

バックグラウンドでサービスを使用してアップロード/ダウンロード操作を行うアプリがあります。ユーザーの選択 (ファイルの量とサイズ) によっては、これらの操作に時間がかかる場合があります。

私のデバイス (nexus s) とテスト エミュレーターでは、すべてが計画どおりに動作しますが、ユーザーから、ビッグ データのアップロード/ダウンロードを選択すると操作が停止するという報告を受けています。

操作は、バックグラウンド サービスで実行されるスレッドを使用して行われます。私の推測では、メモリが少ないデバイスでは、OS がスレッドやサービスを強制終了することがあります。

サービスの onStartCommand() 関数では、操作を実行するスレッドを生成し (処理するデータはインテント内に含まれます)、START_NOT_STICKY を返します。startService(i) を使用しているアクティビティでは、バインドは行われません。

どうすればこれを防ぐことができますか? システムがサービスまたはスレッドを強制終了しないようにするにはどうすればよいですか?

4

1 に答える 1

1

startForeground()を使用すると、目標を達成するのに役立つ場合があります。

ドキュメントから:

開始されたサービスは、startForeground(int, Notification) API を使用して、サービスをフォアグラウンド状態にすることができます。この場合、システムは、ユーザーがアクティブに認識しているものであり、メモリが不足しているときに強制終了の候補ではないと見なします。(理論的には、現在のフォアグラウンド アプリケーションからの極度のメモリ プレッシャの下でサービスが強制終了される可能性はありますが、実際にはこれは問題になりません。)

于 2012-07-22T13:02:45.757 に答える