2017-05-08 27 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

爲什麼不把它放到一個'Thread'中? –

+0

在Action1中保存Action2的引用,並作爲Action1中的最後一個命令調度Action2。然後,一切都按順序進行,您不必關心有多少線程在那裏。 – Robert

+1

最簡單的方法是通過向公共線程發送消息並在該公共線程上運行處理程序來序列化它們。這確保一個在另一個之前完成。另一種方法是使用信號量序列化訪問兩個處理程序的關鍵部分。無論哪種方式,您都需要意識到在行動1之前發生行動2並處理該案件的可能性。 –

回答

0

發現executors.newsinglethreadexecutor()或handlerthread都可以處理任務se終止..

0

我有一個sollution但我不知道是否有更好的sollution比這個還是不

以及至少它的工作原理

使用Asyntask與活動

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 
 
     } 
 
    }

+0

太多的書標記在這裏.. – NitZRobotKoder