2017-05-08 10 views
0

BroadcastReceiver 조치 이벤트가 수신되어 순차적으로 실행해야하는 사용 사례가 있습니다.Android : 자바의 스레드에서 작업 순차적으로

여기서 아래와 같이 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

가장 쉬운 방법은 공통 스레드로 메시지를 보내고 해당 공통 스레드에서 핸들러를 실행하여 직렬화하는 것입니다. 그것은 다른 하나가 끝나기 전에 완료되도록합니다. 또 다른 방법은 세마포어를 사용하여 두 핸들러의 중요 섹션에 대한 액세스를 직렬화하는 것입니다. 어느 쪽이든, 당신은 행동 1이 일어나기 전에 일어나는 행동 2의 가능성을 인식하고 그 사건을 다루어야합니다. –

답변

0

executors.newsinglethreadexecutor() 또는 handlerthread가 모두 작업 se를 처리 할 수 ​​있음을 알았습니다. quend ..

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