ath*_*aos 6 multithreading android looper
我在理解如何使用Looper prepare()/ loop()/ quit()逻辑方面遇到了一些麻烦.
我有三个线程:一个是UI线程,一个是游戏逻辑线程,最后一个是网络通信线程(后台线程,只在使用时生存).
游戏线程对网络调用的结果有很多依赖性,所以我想从游戏线程中旋转网络线程Handler并将结果发回.
当然,由于没有涉及UI线程,我需要在Looper.prepare()某个地方调用... 我认为它应该在游戏线程中调用,但我不能这样做,因为loop()接管它.
如何使用我的处理程序从网络线程回发到游戏线程?
这是怎么回事是,一旦你在一个线程调用Looper.prepare(),其次是Looper.loop(),所有的线程将永远做的是服务其的MessageQueue,直到有人叫退出()在它的活套.
要实现的另一件事是,默认情况下,当一个Handler被实例化时,它的代码将始终在它创建的Thread上执行
你应该做的是创建一个新的Thread并在run()中调用Looper.prepare(),设置任何Handler,然后调用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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11160 次 |
| 最近记录: |