2017-04-18 17 views
-1

私はサービスがバックグラウンドで実行されることを理解します。以前はServiceクラスを使用していましたが、その関連メソッドを知っています。しかし、私の質問は、バックグラウンドでサービスを実行することに対応する内部操作に関連しています。サービスはどのようにAndroidで内部的に動作しますか?

ドキュメントから:"サービスは他のアプリケーションオブジェクトと同様に、ホスティングプロセスのメインスレッドで実行されることに注意してください。

また、私はこの質問にチェック:これはUIスレッドが動作を維持し、サービスを行うことになっているタスクを実行することをHow does a service runs in the background - Android

を意味していますか?これは "アプリケーションの背景"で実行されていると見なすことができますか?アプリケーションのタスクはデフォルトでメインスレッドで実行されるため、サービスはUIなしでそのスレッドで実行されますか?その言葉は正しいですか?または、「OSのバックグラウンドで実行する」がより正確ですか?

サービス(IntentServiceではない)を使用して、そのサービス内で新しいスレッドを開始した場合、アプリケーションのバックグラウンドで実行されているように見えるか、そのスレッドが別のプロセスで実行され、 OSのバックグラウンドで実行していますか?

誰かがこの概念を理解するのを手伝っていただければ幸いです。

ありがとうございました

答えて

1

UIスレッドとは思わないでください。それをメインスレッドと考えてください。アクティビティは、メインスレッド上で実行され、UIを持つオブジェクトです。メインスレッドのUIを更新します。彼らは画面上にあるかどうかに基づいて複雑なライフサイクルを持っています。サービスは、UIを持たないオブジェクトです。それらは、開始および停止されることに基づいているはるかに単純なライフサイクルを持っています。そのようなものとして、他のアプリが画面を所有していても、(停止していない限り)ぶら下がります。

これらのいずれもスレッディングとは関係ありません。どちらのタイプのオブジェクトでも必要な場合にスレッドを開始できますが、そうでないとすべての処理はアプリケーションのメインスレッドで行われます。

+0

ありがとうございます。しかし、ドキュメンテーションの「背景」という用語は、アプリやOSの背景ですか?または、それがUIを持たないことを示すだけですか?また、サービスがスレッドを開始する場合、そのスレッドはアプリケーションのプロセス内で実行されるか、別のプロセスで実行されますか?ありがとうございました。 – Dania

+0

すべてのサービスはデフォルトで同じプロセスにあるため、サービスによって起動されるすべてのスレッドは同じプロセスになります。サービスを別のプロセスで起動することもできますが、いくつかの制限(バインドするためにaidl経由でIPCを使用する必要があるなど)を受け入れることができます。そうすると、アプリケーションの残りの部分とは別のメインスレッドが作成されます。しかし、あなたが何をやっているのか分からない限り、それはお勧めしません。ドキュメンテーションの背景は、「UIを表示しない」ことを意味し、画面上に何があっても実行を継続することを示します。 –

+0

素晴らしいです、ありがとうございました。 – Dania

関連する問題