Android ActivityとServiceの相互作用の方式を簡単に話します。


ダウンロードの進捗を更新する機能を実現します。

1.ラジオを通じて対話する
Server側は現在のダウンロードの進捗を放送により送信し、Client側はこの放送のモニターを登録し、放送を取得した後、放送中の現在のダウンロードの進捗を解析して画面に更新する。
長所と短所の分析:
放送によりActivityとServiceの相互作用が簡単で実現しやすく、簡単なアプリケーションが可能です。しかし欠点も明らかで、放送の送信はシステムに制約されている。システムは優先的にシステム級放送を送信します。特定の状況によっては、私達がカスタマイズした放送は遅延するかもしれません。同時に、ブロードキャスト受信機では、時間のかかる動作を処理できません。そうでないと、システムはANRすなわちアプリケーションが応答しません。
2.共有ファイルのインタラクション
ここで述べた共有ファイルとは、ActivityとServiceが同じファイルを使ってデータを転送する目的を指す。私たちはシェアをシェアするためにSharedPreferencesを使っています。もちろん他のIO方法を使ってもいいです。このようにインタラクティブを実現するには注意が必要です。ファイルの読み書きについては、同じ時間に一方で読むしかなく、同時に書くことができません。
長所と短所の分析:
このような方式に対してActivityとServiceの相互作用を実現するには、配管を使うように、eへ書いて、外へ読んでいくという便利さがあります。しかし、このような方法にも欠陥があり、書き込みデータが複雑でデータ量が大きい場合、書き込みと読み出しデータが一致しないエラーを引き起こす可能性があります。同時に乗り換え駅を通過したので、このような操作はもっと時間がかかります。
3.メッセンジャー相互作用(メッセンジャー相互作用)Handler
Messengerが翻訳したのはメッセンジャーのことで、Handlerオブジェクトを引用して、他の人がメッセージを送ることができます。このクラスはプロセス間のMessageによる通信を許可しています。Handlerを使ってMessengerを作成します。クライアントはこのサービス端末のMessengerオブジェクトを取得すると、サービス端末と通信できます。つまり私たちはメッセンジャーをCient端末とServer端のマイクとして使えば、コミュニケーションができます。
長所と短所の分析:
Messengerを通じてActivityとServiceの相互作用を実現しています。もう少し深くすると、MessengerもAIDLで実現しています。前の2つの実装については、Messenger方式も全体的に分かりやすく、いつもHandlerとThreadを使って通信するのと同じです。
4.Serverでユーザー定義インターフェースのインタラクション
現在のダウンロード進捗を取得するための空の方法があるインターフェースをカスタマイズします。Server端はBinderから引き継ぎ、このインターフェースを実現するクラスで、現在のダウンロード進捗を取得する方法を上書きしました。Client端末がServiceConnectionを通じてこのクラスのオブジェクトを取得することにより、現在のダウンロード進捗を取得する方法を使用して、最終的にリアルタイムのインタラクションを実現することができる。

public interface ICountService { 
  public int getCurrentLoad(); 
} 

public class DownLoadService extends Service implements ICountService{ 
private ServiceBinder serviceBinder = new ServiceBinder();  
public class ServiceBinder extends Binder implements ICountService{ 
  @Override 
  public int getCurrentLoad() { 
    Log.i(TAG, "ServiceBinder getCurrentLoad()... i=:"+i); 
    return i; 
  }   
} 
@Override 
public int getCurrentLoad() { 
  return 0; 
} 
}

@Override 
public IBinder onBind(Intent intent) { 
  Log.i(TAG, "DownLoadService.onBind()..."); 
  return serviceBinder; 
} 
Client端末のTimerは、bindService()が完成してから1秒後にダウンロードの進捗状況を取得します。取得方法は直接int curLoad=iCount Service.get CurntLoad()を通じます。ここでのget CurrenentLoad()方法は、Down LoadService内部クラスServiceBinderにおける方法である。Client端末は、取得したダウンロードの進捗をインターフェースに更新し、プログレスバーを更新する。
長所と短所の分析:
この方法は簡単で実用的で、拡張性が強いが、Server端のデータの取得を開始するために、いくつかの遅延が必要であり、ゼロからの同期更新を完全に実現できないという欠点もある。要約すると、カスタムインターフェースによりActivityとServiceの相互作用を実現する方法がより実用的である。同プロセス中の通信に適用され、プロセスをまたぐ通信はできません。
5.AIDL相互作用
原理:AIDLはAndroidのIPC機構に属し、プロセス間通信によく使われています。
長所と短所の分析:
AIDLはAndroidでプロセス間通信のためによく使われています。木型桜よりも効率が高く、拡張性が良いかもしれません。同時に多くのシステムサービスはこのようにしてアプリケーションとの通信を完成させます。
以上は、皆さんのための簡単なAndroid ActivityとServiceの対話方式のすべての内容です。皆さんの助けになりたいです。よろしくお願いします。