2013-11-28 2 views
0

여러 개의 AsyncTask가있는 활동이 있지만, 뒤로 버튼을 누르면 활동이 다시로드되고 AsyncTask가 다시 실행됩니다. 내가해야 할 일 이전 활동으로 돌아가서 활동과 asynctask를 다시로드하지 않겠습니까? 도와주세요.뒤로 버튼을 누르면 AsyncTask가 다시 시작됩니다.

public class LugarActivity extends SherlockActivity { 

CargarDatos cargarDatos; 
CargarComentarios cargarComentarios; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_lugar); 

     cargarDatos = new CargarDatos(); 
     cargarCometarios = new CargarComentarios(); 

     loadData(); 
} 

public void loadData(){ 
    cargarDatos.execute(); 

} 

public void loadOtherData(){ 
    cargarComentarios.execute(); 
} 


public class CargarDatos extends AsyncTask<Integer, Integer, String>{ 
    @Override 
    protected String doInBackground(Integer... params) { 
       // here download data 
      } 

      @Override 
      protected void onPostExecute(String html) {   
      loadOtherData();   
      } 

} 


public class CargarComentarios extends AsyncTask<Integer, Integer, String>{ 
    @Override 
    protected String doInBackground(Integer... params) { 
       // here download data 
      } 

} 



} 

는 고정! 나는이 코드를 추가 활동에

public class DataManager { 

private static DataManager instance = null; 
protected static boolean isShowingTheView = false; 

protected DataManager() {  } 

public static synchronized DataManager getInstance() { 
     if (instance == null) { 
       instance = new DataManager(); 
     } 
     return instance; 
} 

} 

:

은 내가 싱글 톤 클래스 문제를 해결() 메소드

DataManager dataManager = new DataManager(); 
if(!dataManager.isShowingTheView){ 
     loadData(); 
     dataManager.isShowingTheView = true; 

    }else{ 
     finish(); 
    } 

그리고 마지막으로 내가들의 OnDestroy를 오버라이드 (override)를

@Override 
public void onDestroy(){ 
    dataManager.isShowingTheView = false; 
    super.onDestroy(); 
} 
+0

동일한 문제가있는 경우 loadData를 실행해야하는지 확인하기 위해 if를 추가했습니다. – Pull

답변

0

loadData()onCreate에서 삭제하고 cal 내가 어딘가에있어.

0

다른 활동이 시작되기 전에 Activity이 삭제 된 경우 뒤로 버튼을 사용하면 onRestart 또는 onResume 대신 onCreate이 다시 호출됩니다.

자세한 내용은 here을 참조하십시오.

커프스가 이미 언급했듯이, Fragment을 사용하면 갈 수 있습니다.

추악한 솔루션은 또한 유지 공유 환경 설정을 할 수있는 boolean 한 번 그것은 당신의 ActivityonCreate에 그 기본 설정에 대해 확인 후 다시 시작되지 않도록 AsyncTask이 (또는 onPostExecute에) 시작됩니다.

관련 문제