0

日付をWebサービスに段階的にアップロードしたいと思います。私のコード:

private Thread WebServiceThread;

public void onCreate(Bundle savedInstanceState) {
    //...
    WebServiceThread = new WebService();
    WebServiceThread.start();
}

private class WebService extends Thread {
    public void run() {
        try {
            new WebServiceUpload().execute("");
        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT)
                .show();
        }
    }
} 

private class WebServiceUpload extends AsyncTask<String, Void, String> {
        protected String doInBackground(String... data) {
            // upload part
        }

        protected void onPostExecute(String result) {
            //...
            WebServiceThread = new WebService();
            WebServiceThread.start();
            //<Tab>__what to do here__</Tab>
            //...
        }
}

実行できるようになりましたが、デバイスが遅くなります。この問題を解決するには、親スレッドを閉じる方法または親​​スレッドを再起動する方法を教えてください。(または同じターゲットへの他の練習。)

4

2 に答える 2

1

そのようなスレッドをチェーンする必要はありません。AsyncTaskで段階的にデータをアップロードする単一の拡張機能を作成するだけdoInBackgroundです。進捗レポートを公開したい場合は、 を呼び出して実行できますpublishProgress

ワーカー スレッドからを作成する方法WebServiceUploadは非常に奇妙で、おそらく機能しません。AsyncTaskUI スレッドから開始するように設計されています。new WebServiceUpload().execute()アップロード手順を開始する場合は、メイン スレッドから呼び出すだけです。

于 2012-08-17T07:36:09.480 に答える
0

onPostExecute で、スレッドが実行されているかどうかを確認してから、強制的に停止します。

protected void onPostExecute(String result) {
            //...
            **if (WebServiceThread.isAlive())
                 WebServiceThread.stop();**
            WebServiceThread = new WebService();
            WebServiceThread.start();
            //<Tab>__what to do here__</Tab>
            //...
        }
于 2012-08-17T07:31:03.497 に答える