2011-08-14 5 views
0

활동을 시작하고 사용자가 로그인하면 주요 활동을 새로 고침하고 싶습니다. 로그인 한 사용자로부터 데이터를로드하려면.다른 작업에서 asyncTask를 새로 고치는 방법은 무엇입니까?

이미지 및 이름 등. 나는 이미이 모든 것을 준비했다.

다른 활동을 시작하고 비동기 작업을 다시 실행할 수 있다는 것을 알아야합니다. 다른 활동 내부에서 의도를 시작하는 것부터 시작해야할까요?

답변

2

디자인이 정확히 무엇인지는 명확하지 않지만, 두 가지 다른 활동에서 동일한 AsyncTask를 사용해야하는 경우 특정 활동에 묶여 있지 않고 별도의 클래스 여야합니다. AsyncTask가 업데이트중인 활동을 알 필요가 없도록 두 개의 활동에 공통 인터페이스를 구현하게 할 수 있습니다. 그런 다음, 둘러싼 활동에 대한 참조를 전달하여 태스크를 인스턴스화하고 필요에 따라 시작하십시오. 하나의 활동이 다른 활동을 시작할 필요가 없습니다. 같은

뭔가가 :

지금까지 내가 알고 있어요으로
public interface UserActivity { 
    void updateUserData(UserData userData); 
} 

public class Activity1 implements UserActivity { 

    public void onStart() { 
     UpdateUserDataTask task = new UpdateUserDataTask(this); 
     task.execute(); 
    } 

    public void updateUserData(UserData userData) { 
     // update 
    } 
} 

public class UpdateUserDataTask extends AsyncTask<Void, Void, UserData> { 
    UserActivity userActivity; 

    public UpdateUserDataTask(UserActivitiy userActivity) { 
     this.userActivity = userActivity; 
    } 

    // doInBackground, etc implementation. 

    protected void onPostExecute(UserData userData) { 
     userActivity.updateUserData(userData); 
    } 
} 
+0

무슨 뜻인지 예를 보여줄 수 있습니까? –

+0

코드 예제의 업데이트 된 게시물보기 –

+0

다른 활동에서 인터페이스를 시작하려면 어떻게해야합니까? –

0

, AsyncTasks은 재사용 안된다. 그들은 한 번 실행해야하고, 필요하다면 새로운 것을 만들 수 있습니다.

+0

귀하의 권리,하지만 내가 뭘하려고하면 몇 가지 정보가 다른 활동에서 사용할 수있는 활동을 새로 고치는 것입니다. –

0

AsyncTask이 한번 실행되면 다시 실행할 수 없습니다. 그래도 할 수있는 일은 다음과 같이 onProgressUpdate()publishProgress()을 사용하여 "새로 고침"제어입니다. 이 기능은 한 번만 새로 고침하는 경우에만 작동합니다. 보다 의미 론적으로보고 싶다면 onProgressUpdate()에서 "normal"연산을 수행하고 새로 고침에는 onPostExecute()을 사용할 수 있습니다.

public class MyAsyncTask extends AsyncTask<Void, String, Void> { 

    private boolean isRefresh = false; 
    @Override 
    protected Void doInBackground(Void... arg0) { 
     while (!isRefresh){ 
      //Perform your normal operation 
     } 

    //When isRefresh is true, you want to refresh. 
     this.publishProgress(values); 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(String... values) { 
     // Refresh code here 
     super.onProgressUpdate(values); 
    } 

    public void refreshTask(){ 
     this.isRefresh = true; 
    } 

} 

그런 다음 MyAsyncTask의 객체에 대한 참조를 유지하고 당신이 그것을 새로 고침 할 때마다에 refreshTask()를 호출 할 수있다.

관련 문제