我有一个包含多个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();
}
答案 0 :(得分:0)
从loadData()
移除onCreate
并致电其他地方。
答案 1 :(得分:0)
使用碎片
http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
在配置更改期间,片段可以保留在内存中,因此您可以在自身内部运行asynctask。然后,您可以在片段中查询任务所需的任何状态信息,并相应地更新您的活动。
答案 2 :(得分:0)
如果您的Activity
在其他活动开始之前被销毁,则使用后退按钮会再次呼叫onCreate
,而不是onRestart
或onResume
。
有关详细信息,请参阅here。
正如Kuffs已经提到的那样,使用Fragment
是可行的方法。
Uglier解决方案,您还可以在启动boolean
后(或AsyncTask
)设置共享首选项onPostExecute
,以便在检查后无法再次启动您Activity
onCreate
上的偏好设置。