發生了什麼事是,一旦你在一個線程調用Looper.prepare(),其次是Looper.loop(),所有的線程將永遠做是服務其的MessageQueue,直到有人叫退出()在它的活套。
要認識到的另一件事是,在默認情況下,當處理器被實例化,它的代碼將始終有人在
你應該做的是創建一個新的線程,並在運行中創建的線程中執行( )調用Looper.prepare(),設置任何處理程序,然後調用Looper.loop()。
在這裏記住這些事情是我使用很多地方的基本模式。此外,您應該只需使用AsyncTask就可以了。
public class NetworkThread extends Thread {
private Handler mHandler;
private Handler mCallback;
private int QUIT = 0;
private int DOWNLOAD_FILE = 1;
public NetworkThread(Handler onDownloaded) {
mCallback = onDownloaded;
}
public void run() {
Looper.prepare();
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
// things that this thread should do
case QUIT:
Looper.myLooper().quit();
break;
case DOWNLOAD_FILE:
// download the file
mCallback.sendMessage(/*result is ready*/);
}
}
}
Looper.loop();
}
public void stopWorking() {
// construct message to send to mHandler that causes it to call
// Looper.myLooper().quit
}
public void downloadFile(String url) {
// construct a message to send to mHandler that will cause it to
// download the file
}
}