当我按下后退按钮时,AsyncTask正在重启

时间:2013-11-28 14:43:13

标签: java android android-activity android-asynctask

我有一个包含多个AsyncTask的活动,但当我按下后退按钮时,重新加载Activity并再次执行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();
}

3 个答案:

答案 0 :(得分:0)

loadData()移除onCreate并致电其他地方。

答案 1 :(得分:0)

使用碎片

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

在配置更改期间,片段可以保留在内存中,因此您可以在自身内部运行asynctask。然后,您可以在片段中查询任务所需的任何状态信息,并相应地更新您的活动。

答案 2 :(得分:0)

如果您的Activity在其他活动开始之前被销毁,则使用后退按钮会再次呼叫onCreate,而不是onRestartonResume

有关详细信息,请参阅here

正如Kuffs已经提到的那样,使用Fragment是可行的方法。

Uglier解决方案,您还可以在启动boolean后(或AsyncTask)设置共享首选项onPostExecute,以便在检查后无法再次启动您Activity onCreate上的偏好设置。