嗯,我有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 !!這非常簡單,並且完美。謝啦! –