在阅读了一些关于Android配置的文章之后,当我将视图从纵向更改为横向时,我仍然不知道如何不启动异步任务。我从服务器加载一些信息,每次旋转手机都加载它是不明智的。我想加载一次。如果不在Manifest文件中添加'changeConfig'标志,我可以这样做吗?
答案 0 :(得分:3)
1使AsyncTask成为类的私有实例变量(必须声明为静态内部类或单独文件)。
2在onRetainConfigurationChanges()
public Object onRetainNonConfigurationInstance() {
return yourAsyncTask;
}
3在oResume()
中找回它:
public void onResume() {
Object data = getLastNonConfigurationInstance();
if (data != null) {
... // pass in your activity to the AsyncTask so it can update your views
} else {
... // create new AsyncTask and spin it up.
}
}
答案 1 :(得分:1)
您需要查看此http://developer.android.com/resources/articles/faster-screen-orientation-change.html
这将解决你提到的所有问题
基本上你需要实现
public Object onRetainNonConfigurationInstance()
返回您想要的数据
然后你需要调用getLastNonConfigurationInstance,如果值在那里,不要从服务器获取它: - )
答案 2 :(得分:0)
不要盲目启动asyncTask。请遵循以下说明:
在“onCreate(...)do:
里面if(savedInstanceState!=null){
guard=(Boolean) savedInstanceState.get(guardkey) //guardkey is the bundle key. (*1)
} else{
guard=false;
}
if(!guard){
//launch your asyncTask
guard=true;
//other operations if needed
}
现在,添加到“onSaveInstanceState(outState)”方法(如果你没有它,现在就这样做)以下一行:
outState.put(guardkey, guard); //(*1)
注意:这会阻止您在每次更改配置时触发任务。它假设您已经从服务器收到了您的信息,并且您已将其保存在您的活动中(这意味着您可以在重新启动活动时检索它)。否则,此解决方案不适合您。