2016-08-12 17 views
6

HandlerThreadとIntentServiceの主な違いは何ですか?また、主なユースケースシナリオは何ですか?HandlerThreadとIntentService

私が理解していることHandlerThreadには、Handlerによって供給されるmessageQueueを管理するLooperが含まれています。私が理解する限り、あなたはHandlerThreadのタスクをプッシュして実行することができます。 UI以外に関連した長時間実行される操作には、runOnUiThread()によって結果をUIに戻すことができます。

これに対して、IntentServiceは、長期間実行されるnonUI関連の操作に適しており、selfStop()を呼び出すジョブが終了したときにタスクを順番に実行することができます。 IntentServiceがタスクを処理している場合、新しい要求が到着すると、それはキューに追加され、1で完了したときに2を処理します。

私の観点から見ると、彼らはまったく同じように同じ仕事をしています。 私は、ユーザーがボタンをタップすると、私はファイルをダウンロードし始めているアプリを持っていると仮定しよう。ユーザーが複数回タップすると、新しいタスクがキューに入れられ、第1が完了したときにのみ第2が起動されます。 どうすればよいですか? IntentServiceまたはHandlerThread?だから、

答えて

5

、HandlerThreadとIntentServiceの両方のソースコードをチェックした後、私は以下のが見つかりました:

  • IntentServieは内部HandlerThreadインスタンス(これは分離作業スレッドである)
  • selfStopを呼び出すIntentServiceを(持っています)onHandleIntent()メソッドが実行された後、(サービスクラスを拡張しているので)自身をシャットダウンします。
  • IntentServiceはサービスクラス自体から拡張されています。必要に応じて、必要に応じて別のプロセスで開始することもできます。

IntentServiceのonCreate()メソッド、作業スレッドを作成:作業が完了した後、サービスを死滅させるのに必要な

@Override 
public void onCreate() { 
    super.onCreate(); 
    HandlerThread thread = new HandlerThread("IntentService[" + mName + "]"); 
    thread.start(); 
    mServiceLooper = thread.getLooper(); 
    mServiceHandler = new ServiceHandler(mServiceLooper); 
} 

IntentService独自のハンドラ、:私の読書IntentServiceで

private final class ServiceHandler extends Handler { 
    public ServiceHandler(Looper looper) { 
     super(looper); 
    } 

    @Override 
    public void handleMessage(Message msg) { 
     onHandleIntent((Intent)msg.obj); 
     stopSelf(msg.arg1); 
    } 
} 

HandlerThreadとServiceの組み合わせです。

これ以上の回答と解決策はありません。

関連する問題