我在片段中的onCreateView中执行了asynctask。当屏幕关闭并且应该以某种方式显示片段时,asynctask开始但isCancelled()为true。我使用PARTIAL_WAKE_LOCK,但问题没有解决。 提前谢谢。
以下是示例代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
activity = getSherlockActivity();
context = activity.getApplicationContext();
view = inflater.inflate(R.layout.main, container, false);
DownloadXMLTask = new DownloadXML(getActivity());
DownloadXMLTask.execute(file);
return view;
}
private class DownloadXML extends AsyncTask<File, Integer, String> {
private Activity activity;
public DownloadXML(Activity activity) {
this.activity = activity;
}
protected void onPreExecute() {
... Do stuff ...
}
protected String doInBackground(File... files) {
// Check if the task is cancelled
if (isCancelled()) { return null; }
... Do stuff ...
... Do stuff ...
... Do stuff ...
return null;
}
protected void onPostExecute(String result) {
... Do stuff ...
}
@Override
protected void onCancelled() {
... Do stuff ...
}
}
答案 0 :(得分:0)
如果您想运行某些内容,无论您的活动是否正在运行,它都必须在服务中。可能最容易开始使用IntentService
,它会自动处理后台线程中的每个意图。从活动中,制作描述要执行的工作的意图,并使用此意图startService
您的服务。提供onHandleIntent
当前doInBackground
中代码的意图ContentProvider
。您可以将结果传回广播中的活动,或通过更新{{1}}等其他机制。