2017-05-08 7 views
0

BroadcastReceiverアクションイベントが受信され、順番に実行する必要があるユースケースがあります。Android:Javaでのスレッド上のタスク

ここでは、Event1とEvent2を連続して受信することができます。 Event1作業を完了してから、Event2作業を開始する必要があります。

これを順次にする方法は?

BroadcastReceiver{ 

onReceive(){ 

Event1: 
Task1 doing Something different.//Cant run network operations here. 

Event2: 
Task2 doing Something different.//Cant run network operations here. 

} 

} 

executors.newsinglethreadexecutor()またはhandlerthreadは、私がこれを行うのat..any他の良い方法を探していますオプションされていますか?

+1

「スレッド」に入れてみませんか? –

+0

Action1のAction2の参照を、Action1のSchedule2の最後のコマンドとして保存します。すべてが順番に実行され、そこにいくつのスレッドがあるか気にする必要はありません。 – Robert

+1

これを行う最も簡単な方法は、メッセージを共通のスレッドに送信し、その共通のスレッドでハンドラを実行することによって、シリアル化することです。そうすれば、一方が他方の前に終わることが保証される。別の方法は、セマフォを使用して2つのハンドラのクリティカルセクションへのアクセスをシリアライズすることです。いずれにしても、アクション1の前にアクション2が発生する可能性を認識し、そのケースを処理する必要があります。 –

答えて

0

executors.newsinglethreadexecutor()またはhandlerthreadが両方ともタスクseを処理できることが判明しました。事実..

0

私はsollutionを持っているが、私は、少なくともそれが

あなたのイベント

public class Event1 extends AsyncTask<Void,Void,Void>{ 
 
    @Override 
 
    protected Void doInBackground(Void... params) { 
 
     //use your Event 1 methode here 
 
     return null; 
 
    } 
 

 
    @Override 
 
    protected void onPostExecute(Void aVoid) { 
 
     super.onPostExecute(aVoid); 
 
     //call Event2 
 
     Event2 event2=new Event2(); 
 
     event2.execute(); 
 
    } 
 
} 
 
    public class Event2 extends AsyncTask<Void,Void,Void>{ 
 
     @Override 
 
     protected Void doInBackground(Void... params) { 
 
      //use your Event 2 methode here 
 
      return null; 
 
     } 
 

 
     @Override 
 
     protected void onPostExecute(Void aVoid) { 
 
      super.onPostExecute(aVoid); 
 
      //call Event3 
 
      Event3 event3=new Event3(); 
 
      event3.execute(); 
 
     } 
 
    } 
 

 
public class Event3 extends AsyncTask<Void,Void,Void>{ 
 
     @Override 
 
     protected Void doInBackground(Void... params) { 
 
      //use your Event3 methode here 
 
      return null; 
 
     } 
 

 
     @Override 
 
     protected void onPostExecute(Void aVoid) { 
 
      super.onPostExecute(aVoid); 
 
      //everything would come after Event 3 write it here 
 
     } 
 
    }

でAsyntaskを使用する働きも

これよりもはるかに優れsollutionがあるかどう知っているかいないいけません

+0

本のマーキングが多すぎる.. – NitZRobotKoder

関連する問題