2013-11-28 6 views
0

У меня есть активность с несколькими 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 
      } 

} 



} 

ИСПРАВЛЕНО!

я решена проблема с классом Singleton:

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 
public void onDestroy(){ 
    dataManager.isShowingTheView = false; 
    super.onDestroy(); 
} 
+0

Если бы та же проблема, я добавил, если проверить, нужно ли мне запускать loadData – Pull

ответ

0

Удалить loadData() от onCreate и cal Где-то в другом месте.

0

Использование Фрагменты

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

фрагмент может остаться в памяти во время изменения конфигурации и, следовательно, вы можете запустить AsyncTask внутри себя. Затем вы можете запросить фрагмент для любой информации о состоянии, требуемой вам из своих задач, и соответствующим образом обновить свою деятельность.

0

Если ваш Activity уничтожен до начала другой активности, с помощью кнопки «Назад» снова вызовет onCreate, вместо onRestart или onResume.

Для получения более подробной информации см. here.

Как Kuffs уже упоминает, используя Fragment s - путь.

уродливее решение, вы можете также установить общие предпочтения держащих boolean как только ваш AsyncTask запущен (или на его onPostExecute), так что он не будет запущен снова после проверки этого предпочтения на ваши Activity «s onCreate.

Смежные вопросы