-1

フラグメントの 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 ...
        }
    }
4

1 に答える 1

0

アクティビティが実行されているかどうかに関係なく何かを実行したい場合は、サービス内にある必要があります。IntentServiceおそらく、バックグラウンド スレッドで各インテントを自動的に処理する から始めるのが最も簡単でしょう。アクティビティから、実行する作業を説明するインテントと、startServiceこのインテントを使用するサービスを作成します。あなたのインテントonHandleIntentに現在あるコードを与えてくださいdoInBackground。結果をブロードキャストでアクティビティに戻すか、ContentProvider.

于 2013-08-30T08:14:31.937 に答える