簡體   English   中英

當我按下后退按鈕時,AsyncTask正在重新啟動

[英]AsyncTask is restarting when i press back button

我有一個具有多個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();
}

onCreate刪除loadData()並在其他地方調用。

使用片段

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

片段可以在配置更改期間保留在內存中,因此您可以在其內部運行asynctask。 然后,您可以查詢該片段以獲取任務中所需的任何狀態信息,並相應地更新“活動”。

如果您的Activity在其他活動開始之前被銷毀,則使用“后退”按鈕將再次調用onCreate ,而不是onRestartonResume

有關詳細信息,請參見此處

正如Kuffs已經提到的那樣,使用Fragment是必經之路。

在Uglier解決方案中,您還可以在AsyncTask啟動時(或在其onPostExecute )設置共享的首選項,該共享首選項將boolean設置為boolean ,以便在ActivityonCreate檢查該首選項后,它不會再次啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM