2017-05-08 3 views
0

Anwendungsfall haben BroadcastReceiver Aktionsereignisse empfangen und müssen sie in sequenzieller Reihenfolge ausführen.Android: Task sequenziell auf einen Thread in JAVA

Hier wie unten Event1 und Event2 können Rücken an Rücken empfangen werden. Event1-Arbeit muss abgeschlossen sein und dann sollte Event2-Arbeit gestartet werden.

Wie wird es sequenziell?

BroadcastReceiver{ 

onReceive(){ 

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

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

} 

} 

executors.newsinglethreadexecutor() oder handlerthread ist Option ist ich suche at..any andere gute Möglichkeit, dies zu tun?

+1

Warum nicht in einem 'Thread' stecken? –

+0

Speichern Sie eine Referenz von Aktion2 in Aktion1 und als letzten Befehl in Aktion1 planen Sie Aktion2. Dann läuft alles sequenziell und Sie müssen sich nicht darum kümmern, wie viele Threads es gibt. – Robert

+1

Der einfachste Weg dazu besteht darin, sie zu serialisieren, indem Sie eine Nachricht an einen gemeinsamen Thread senden und die Handler für diesen gemeinsamen Thread ausführen. Das sorgt dafür, dass man vor dem anderen fertig ist. Ein anderer Weg wäre die Verwendung von Semaphoren, um den Zugriff auf die kritischen Abschnitte der beiden Handler zu serialisieren. In jedem Fall müssen Sie sich der Möglichkeit bewusst sein, dass Aktion 2 vor Aktion 1 auftritt und diesen Fall behandelt. –

Antwort

0

Gefunden, dass executors.newsinglethreadexecutor() oder handlethread beide die Aufgabe se behandeln können quential ..

0

ich habe ein sollution Aber ich weiß nicht, ob es viel besser sollution als dies oder nicht

gut es zumindest

Verwendung Asyntask mit Ihren Events

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

arbeitet
+0

Zu viel Buchmarkierung hier .. – NitZRobotKoder