/ /活動とサービスコミュニケーション - アンドロイド、アンドロイド活動、アンドロイドサービス

活動とサービスのコミュニケーション - アンドロイド、アンドロイド - アクティビティ、アンドロイド - サービス

私のアプリケーションは、サービスを作成する1つのアクティビティで構成されています。アプリケーションが実行されている限り、サービスを実行し続けたいと思います。知っている:

  1. Androidシステムは、メモリ不足の状態で、アクティビティがバックグラウンドで行われていると、アクティビティを強制終了する可能性があるため、保証されていません。
  2. システムによってサービスを停止(および強制終了)することができます。
  3. サービスをアクティビティにバインドすると、アクティビティはサービスが停止または開始されている場合に通知を受け取ります。ただし、アクティビティがバックグラウンドで行われると(onStop())、サービスは実行を停止することがあります。私がここで間違っているなら私を訂正してください。
  4. アクティビティのonResume()でサービスにバインドしたらonStop()でunbind()を実行すると、アプリケーションがバックグラウンドで起動したときにサービスの実行が停止することがあります。アクティビティのonDestroy()でonCreate()とunbind()をバインドすると、バックグラウンドでも自分のアクティビティがサービスから通知を受け取ることになります。
  5. サービスを実行し続けるための最善の方法は何ですかアプリケーションが実行されている限り、サービスからアクティビティへの通知を受け取ります。アプリケーションにはアクティビティが1つしかないため、アクティビティをバックグラウンドで送信すると、アプリケーションがバックグラウンドで行われることになります。

ありがとう

回答:

回答№1は0
  1. 真実
  2. trueですが、startForeground()を使用するともっとまれです。
  3. サービスは通常、すべて停止するまで停止しませんでした活動は縛られていません。しかし、最後があるとき、それはそうするでしょう。そのため、isFinishing()== trueの場合にのみonPauseでバインドを解除すると、バックグラウンドに移行したときにサービスが停止するのを防ぐことができます。
  4. 3を参照してください。
  5. 私は個人的にはアクティビティにハンドラを設定し、サービスからそれにメッセージを送るのが好きです。

回答№2の場合は0

あなたがバインドしている場合 Service あなたの Activity。それは単にあなたの活動が動いている限りあなたが動くためにサービスが必要であることを意味します。バインドする必要がない場合 Service アクティビティを持っているか、アップデートする必要はありません。 UI あなたが Service が走っています。あなたを縛ってはいけません Service あなたの Activity。この場合、さまざまなアクションに対して Service あなたが使用しているユーザーに通知することができます Android Notifications。 xxのダウンロードが完了したことをユーザーに通知するようなものです。

それはあなたが達成したいと思うあなたの目的に完全に依存します Service.


回答№3の場合は0

使えるなら IntentService あなたのアプリケーションのために、あなたはを通してサービスにデータを渡すことができます Intent。結果は、アクティビティを通じてアクティビティに返すことができます。 ResultReceiver


回答№4の場合は0

あなたがあなたの Service あなたのユニークな Activity、あなたはそれが生きている限り生きているでしょう Activity 終了していない service バインドされていません。 onCreate() あなたを止めるとき、それは解き放たせて activity (何もする必要はありません)。

リスナーを作成できます interface あなたの中で serviceで実装すること Activityそれで、あなたはこれらの通知をから送信することができます。 Service 〜に Activity。あなたはグーグルならこれに関する適切な例と情報を見つけるでしょう。