嗯,我有3个滑动选项卡,并在每个选项卡中我已经在片段onCreateView()方法中调用了asynctask。它在正常情况下显示结果,但问题是当我旋转屏幕。基本上它会在Asynctask正在进行时以及完成任务之前强制关闭 - 我旋转屏幕。如何取消一个asyncTask当一个滑动标签旋转?
所以,我试着取消onPause中的asynctask并在onCreateView()中再次调用它。以下是片段内的代码:
public class AllFragment extends Fragment
{
SearchBusBeans searchBusObj;
ArrayList<SearchBusBeans> searchBusObj_arr;
SearchingBusesAdapter myAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{ .....
....
searchBusObj_arr = new ArrayList<SearchBusBeans>();
new GetSearchedBusesAsync().execute();
}
@Override
public void onPause() {
super.onPause();
GetSearchedBusesAsync asyncObj = new GetSearchedBusesAsync();
if(asyncObj.getStatus() == AsyncTask.Status.RUNNING){
asyncObj.cancel(true);
}
}
private class GetSearchedBusesAsync extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute() { super.onPreExecute(); }
@Override
protected Void doInBackground(Void... params)
{
if(isCancelled())
this.cancel(true);
if(!isCancelled())
{...........
......do my codes.......
searchBusObj = new SearchBusBeans();
searchBusObj.setname(j_name);
searchBusObj_arr.add(searchBusObj);
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
pBar.setVisibility(View.GONE);
myAdapter = new SearchingBusesAdapter(getActivity().getApplicationContext(), searchBusObj_arr);
gridView.setAdapter(myAdapter);
}
} //end of asynctask
} //end of fragment
现在,您可以看到我已取消onPause中的asynctask。和内doInBackground()我已经完成我的代码在条件-if(!isCancelled())。那么,不应该asynctask退出,而不是去onPostExecute()?
我哪里错了?以及如何正确执行取消和执行?
ggg !!这非常简单,并且完美。谢啦! –