2012-07-10 2 views
0

서버에서 데이터를 가져 와서 목록보기의 UI에 게시하는 시나리오를 고려해보십시오. 그러나 이것은 진행되는 활동이므로 결코 멈추지 않습니다.android multithreading and network on main thread 예외;

  1. 두 작업은 작업자 스레드
  2. 에 있어야 :

    taskA{ //fetches data over network 
    
    if(!update) 
        fetch();//network operation 
    
    } 
    
    taskB{//using this data UI is updated at runtime just like feed. 
    
    if(update) 
        show();//UI operation 
    } 
    

    taskA 지금 내가 직면하고있는 문제는,이 taskB 자고과 반대되는 시간 (A)에 의해 시작 완료된 후, 처음 시작 간다

  3. 두 작업 모두 활성 상태가 될 때까지 주기적으로 진행됩니다.
  4. 핸들러를 사용하여 UI 작업을 주 스레드에 게시하는 경우 taskB가 중지 된 것처럼 보입니다.

아무도 나에게 디자인을 제안 해 주실 수 있습니까?

답변

2

AsyncTask이 (가) 당신을 위해 일을하고 있습니다. 당신은 Activity 메인 클래스의 내부 클래스로 만들 수 있습니다.

http://developer.android.com/reference/android/os/AsyncTask.html

예제 코드

private class YourTask extends AsyncTask<URL, Integer, String> { 
    protected String doInBackground(URL... urls) { 
     // Fetch Data (Task A) 
     return "Result"; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     // Show progress 
    } 

    protected void onPostExecute(String result) { 
     // Show UI after complete (Task B) 
    } 
} 
+0

이것은 좋은 대답이지만 사용자가 기기를 돌릴 때 활동이 회전하지 않는 경우에만 맞습니다. –

+1

처리가 복잡하지 않습니다. 보다 구체적인 해결책은 http://stackoverflow.com/questions/2620917/how-to-handle-an-asynctask-during-screen-rotation을 참조하십시오. –

+0

만약 내가 틀렸다면 나를 바로 잡아주세요.하지만 taskA와 같은 반복적 인 작업을 위해 asynctask를 사용한다면 매번 동일한 작업을 수행 할 새 스레드를 생성 할 것입니다. – user1254554

0

당신은 또한 당신이 안드로이드 서비스가 경량하지만 설정에 더 복잡한 일부 sample code

을 확인할 수 있습니다 IntentService를 사용할 수 있습니다.

AsyncTask는 매우 쉽지만 권장되지는 않습니다. 단점과 단점이 많기 때문입니다. Loaders도 살펴볼 수 있지만 AsyncTasks만큼 쉽지는 않습니다.

관련 문제