0

我想逐步将日期上传到网络服务。我的代码:

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真的很奇怪,很可能不起作用。AsyncTask设计为从 UI 线程开始。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 回答