【发布时间】:2015-07-19 07:57:05
【问题描述】:
我有一个简单的程序,我需要根据服务器响应更新列表和文本... 但是,如果在执行 doinbackground 时屏幕旋转,Asynctask onpostexecute 不会更新视图。
我开始知道,在重新创建活动时,onpostexecute 不会更新其视图的原因(同样的问题..这里是链接:Chek this link) 但我对答案并不满意,因为它只是建议限制重新创建活动(我想重新创建活动,因为在我的项目中我在横向模式下有一些额外的布局)。
请不要通过获取片段来建议setretaininstance(true),因为它不调用oncreateview(),这不适合我的项目。
可能作为最后一个选项,我可以在 onpreexecute 中以编程方式限制方向并在 onpostexecute 中释放它。但我认为这仍然不是一个好习惯。
public class MainActivity extends ActionBarActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView) findViewById(R.id.textview);
if(savedInstanceState==null)
{
new myAsync().execute();
}
}
public class myAsync extends AsyncTask<Void, String, Void>
{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
textView.setText("started");
Log.e("started", "started");
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@SuppressWarnings("deprecation")
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.e("executed", "executed");
}
}
}
这是我的示例程序。如果屏幕旋转,textview 不会更新。
请建议。提前致谢。
【问题讨论】:
-
使用
AsyncTaskLoader而不是AsyncTask。它处理生命周期并提供取消/停止功能 -
开始工作了..但文档说它受 api 11 支持。我的应用程序应该支持 api 9
-
它在支持库中..Reference
标签: java android android-asynctask screen-orientation