サービスに関しては疑問があります。
サービスがバックグラウンドで実行されていることは知っていますが、サービス内にスレッドを作成する必要があると思いました。そうしないと、メイン スレッドがブロックされ、ANR エラーが発生します。
私はそれを手に入れたと思いました!しかし、その後、Android 開発者ガイドでこれを読みました。
…ユーザーが同じアプリケーションからアクティビティを操作しているときに、サービスが集中的な操作またはブロック操作を実行すると、サービスはアクティビティのパフォーマンスを低下させます。アプリケーションのパフォーマンスに影響を与えないようにするには、サービス内で新しいスレッドを開始する必要があります。>
この段落では、「集中操作またはブロック操作」について言及されていますが、ANR エラーについては言及されておらず、パフォーマンスについて言及されています。では、サービスはどのように機能するのでしょうか。
アクティビティがサービスを開始するとします。サービスはデフォルトでメイン スレッドのバックグラウンドで実行されますか? つまり、サービスの実行中にアクティビティを引き続き使用できますが、アクティビティとサービスがメイン スレッドのリソースを共有しているため、アクティビティのパフォーマンスが低下し、サービスが CPU を集中的に使用する作業を行っている場合、サービスが終了する可能性があります。アクティビティが使用するリソースがなく、最終的に ANR エラーが発生します。
ベスト プラクティス (ただし、サービスが軽い作業を行っている場合は必ずしもそうとは限りません) は、サービス内で新しいスレッドを開始することです。これで、アクティビティとサービスは独自のスレッドのリソースを使用します。その後、アクティビティを閉じることができますが、Android はサービス スレッドを維持します。
あれですか?ありがとう =)