1

私のアプリで。MyAppなどのApplicationクラスを拡張しましたが、A、B、C、Dなどのアクティビティはほとんどありません。Aはデフォルトのアクティビティまたはルートアクティビティです。MyAppのOnCreate内でサービス(たとえばMyService)を開始し、ユーザーがアプリケーションからログアウトしたときにサービスを停止したいのですが、

ただし、アクティビティ(A、B、C、D)、MyApp、およびMyServiceの間で通信するための強力な方法が必要です。これで、アプリケーションはメモリから2回目に起動されます。MyAppのOnCreateは呼び出されないので、アクティビティA内にあるSignInボタンのOnClickからサービスを開始したいと思います。ここでいくつか質問があります:-

  1. startServiceとbindServiceの両方を試しました。startServiceの問題は、将来使用するためにサービス参照を取得できないことです。bindServiceを使用すると、明示的に停止するまで、アプリケーションのライフサイクル全体でサービスが表示されます。私の場合、どちらの方法が当てはまりますか?

  2. サービスとMyApp/アクティビティの間の通信を実装するための最良の方法は何ですか?コミュニケーションとは、2つのタイプのコミュニケーションを意味します。1。UIスレッドが必要です。つまり、アクティビティを開始したり、ダイアログを表示したりします。2. myService.doSomehing()のようなもの。

  3. サービスには、アプリケーションの存続期間中に閉じてはならないネットワーク通信を行うスレッドがあります。START_STICKYは私のために働くか、私はそのために追加の手配をする必要があります。

このアプリはGingerBread+デバイスで実行されることになっています...

4

1 に答える 1

1

拡張アプリoncreate内でサービスをバインドし、そのバインドオブジェクトを返すパブリックメソッド(getBinding)を作成します...ルート/デフォルトアクティビティで、キャストされたgetApplicationオブジェクトのgetBindingメソッドを介したoncreate ..すべてのアクティビティが閉じたときにバインドを解除します(各getBindingメソッドでカウンターを保持します)

これをチェックしてくださいアプリケーション内のサービスへのクリーンなバインド/バインド解除

したがって、1)バインドサービス2)バインディングオブジェクト3)STARTSTICKYで十分です

于 2013-02-06T07:45:17.970 に答える