簡體   English   中英

如何在 android 中等待線程完成?

[英]How to wait for thread to finished in android?

如何等待線程完成以啟動依賴於 android 中先前線程的新線程?

考慮到我有 2 個線程 thread1 和 thread2。 在thread1中,我在socket上執行了寫任務,在thread2中,我在socket上執行了讀取任務。 在套接字上寫入后,我必須等待一段時間,因為客戶端需要處理數據並在啟動讀取過程后回復。 那么如何保證socket上的寫是完整的,socket上的讀是完整的。

這是我使用的線程代碼,

class Thread1 implements Runnable {

    @Override
    public void run() {

        try {
            socket = new Socket(SERVER_IP, SERVER_PORT);
            output =  socket.getOutputStream();
            input = socket.getInputStream();

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    //tvMessage.setText("Connected\n");
                    Toast.makeText(MainActivity.this, "Connected", Toast.LENGTH_LONG).show();
                }
            });
        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class Write_Thread implements Runnable {

    @Override
    public void run() {
        try {
            output.write(output_array,0,data_length);
        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

class Read_Thread implements Runnable {
    @Override
    public void run() {
        while (true) {
            try {
                rec_count = input.read(input_array);
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            }catch (IOException e) {
                e.printStackTrace();
            }

        }

    }
}

我在按鈕的 onclick 監聽器中調用那些讀寫線程。

您可以閱讀有關 join() 的信息。 或者您可以在寫入完成時調用回調 function 並將此回調 function 傳遞給寫入數據的第一個線程。

像這樣的東西

class WritingThread extends Thread {
private OnWritingCompleted callback;

public WritingThread(OnWritingCompleted callback){
this.callback = callback;
}

}

interface OnWritingCompleted {
void onCompleted()
}

您可以像這樣將這個回調 function 傳遞到所需的位置

new WritingThread(new OnWritingCompleted { 
    override void onCompleted() {
    // start reading thread here 
    }
})

當寫作完成時就這樣做

callback.onCompleted()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM