Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的应用程序冻结,如何在其中实现线程?_Java_Android_Multithreading_Freeze - Fatal编程技术网

Java 我的应用程序冻结,如何在其中实现线程?

Java 我的应用程序冻结,如何在其中实现线程?,java,android,multithreading,freeze,Java,Android,Multithreading,Freeze,你能帮我弄清楚如何实现这个线程,这样它在等待服务器的回答时不会冻结吗? 我已经尝试了5个小时左右,我很简单,找不到一种方法在线程中使用它,然后返回它,用tv.setText()设置文本 将负责向服务器发出请求的代码放在单独的线程中: Thread thread = new Thread() { @Override public void run() { try { // put your socket operations here

你能帮我弄清楚如何实现这个线程,这样它在等待服务器的回答时不会冻结吗? 我已经尝试了5个小时左右,我很简单,找不到一种方法在线程中使用它,然后返回它,用tv.setText()设置文本


将负责向服务器发出请求的代码放在单独的线程中:

Thread thread = new Thread() {
    @Override
    public void run() {
        try {
            // put your socket operations here   
        } catch (InterruptedException e) {
           // handle exception if you need
        }
    }
};

thread.start();
这就是你要找的。从“帮助”页面:

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }
私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i

请记住,
doInBackground
在单独的线程中运行,
onPostExecute
doInBackground
完成后在UI线程中运行。

您是否尝试过
out.flush()
out.println(“更新”)之后?问题是不允许您从UI线程以外的其他线程对UI进行更改。您需要使用一个处理程序或其他东西来提醒UI线程视图更新。
 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }