当屏幕关闭时,Android AsyncTask使用isCancelled()= true执行

时间:2013-08-30 07:58:24

标签: android android-asynctask

我在片段中的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 ...
        }
    }

1 个答案:

答案 0 :(得分:0)

如果您想运行某些内容,无论您的活动是否正在运行,它都必须在服务中。可能最容易开始使用IntentService,它会自动处理后台线程中的每个意图。从活动中,制作描述要执行的工作的意图,并使用此意图startService您的服务。提供onHandleIntent当前doInBackground中代码的意图ContentProvider。您可以将结果传回广播中的活动,或通过更新{{1}}等其他机制。