1

アプリケーションの起動時にリモート サービスにバインドする Android アプリケーションがあります。リモート サービスは、Bluetooth ビデオ カメラに抽象化を提供するため、コマンドの送信とイベントの受信を簡単に行うことができます。バインディングは、 ではApplicationなく、それ自体から発生しActivityます。Bluetooth へのカメラ接続がアクティブである限り、リモート サービスからイベントを受信できるようにアプリケーションを実行し続けることが重要です。主な理由は、記録しているかどうかを知る必要があり、記録している場合は定期的に GPS 座標を送信する必要があるためです。

自分のアプリケーション内でサービスを使用してそれを管理すると、アプリケーションが強制終了されない可能性が高くなりますか? または、リモート サービスにまだバインドされているため、アプリケーションが強制終了されても安全ですか? もちろん、メモリ要件が必要な場合、Androidシステムがアプリを強制終了することは理解していますが、しばらく座っていたからといってアプリを強制終了することはありますか?

4

1 に答える 1

2

アプリケーションのプロセスは、メモリが少ない場合にのみ削除する必要がありますが、空のプロセスやバックグラウンド アクティビティではなくサービスを使用すると、プロセスの重要性が認識されます。startForeground() を使用して、Android がサービスを停止する可能性を低くすることもできます。

http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycleから:

プロセスのライフサイクル

Android システムは、アプリケーション プロセスをできるだけ長く維持しようとしますが、メモリが少なくなると、最終的には古いプロセスを削除する必要があります。アクティビティのライフサイクルで説明したように、どのプロセスを削除するかの決定は、ユーザーとそのプロセスとのやり取りの状態に密接に関係しています。一般に、プロセスで実行されるアクティビティに基づいてプロセスが取り得る 4 つの状態があり、重要度の高い順にここにリストされています。システムは、より重要なプロセス (最初のプロセス) を強制終了する前に、重要度の低いプロセス (最後のプロセス) を強制終了します。

  1. フォアグラウンドアクティビティ (ユーザーが現在操作している画面上部のアクティビティ) が最も重要であると見なされます。そのプロセスは、デバイスで利用可能なよりも多くのメモリを使用する場合、最後の手段としてのみ強制終了されます。通常、この時点でデバイスはメモリ ページング状態に達しているため、ユーザー インターフェイスの応答性を維持するために必要です。
  2. 可視アクティビティ (フォアグラウンド ダイアログの背後にあるアクティビティなど、ユーザーには表示されるがフォアグラウンドにないアクティビティ) は非常に重要であると見なされ、フォアグラウンド アクティビティの実行を維持するために必要でない限り、強制終了されません。
  3. バックグラウンドアクティビティ (ユーザーには表示されず、一時停止されているアクティビティ) はもはや重要ではないため、システムはそのプロセスを安全に強制終了して、他のフォアグラウンドまたは表示されているプロセスのためにメモリを再利用できます。そのプロセスを強制終了する必要がある場合、ユーザーがアクティビティに戻ったときに (再び画面に表示されるように)、その onCreate(Bundle) メソッドが、以前に onSaveInstanceState(Bundle) で提供されていた savedInstanceState で呼び出されます。ユーザーが最後に終了したときと同じ状態で再起動できます。
  4. のプロセスは、アクティビティや他のアプリケーション コンポーネント (Service または BroadcastReceiver クラスなど) をホストしていないプロセスです。これらは、メモリが少なくなると、システムによって非常に迅速に強制終了されます。このため、アクティビティの外部で行うバックグラウンド操作は、アクティビティ BroadcastReceiver または Service のコンテキストで実行して、プロセスを保持する必要があることをシステムが認識できるようにする必要があります。

アクティビティは、アクティビティのライフサイクル自体とは独立して存在する長時間実行操作を実行する必要がある場合があります。例として、Web サイトに写真をアップロードできるカメラ アプリケーションがあります。アップロードには時間がかかる場合があります。アプリケーションは、ユーザーが実行中のアプリケーションから離れることを許可する必要があります。これを実現するには、アップロードが行われる Service を Activity で開始する必要があります。これにより、システムは、元のアクティビティが一時停止、停止、または終了したかどうかに関係なく、アップロード中にプロセスに適切な優先順位を付けることができます (他の目に見えないアプリケーションよりも重要であると見なされます)。

于 2013-01-14T23:40:33.323 に答える