android 如何实现单线程异步操作(类似windows那样的)

本身游戏有个主线程逻辑 我使用了handler 以及 AsyncTask 但是因为这两个其实是多线程的异步操作,android有没有单线程下的异步操作?比如联网的时候等候时间较长 导致无法响应UI线程的按键操作等- -!

5个回答

[quote]如果在这一个Thread 既保证联网不受阻塞同时也能响应触摸按键 的话 是不是就必需用另一个线程处理handel或是AsyncTask? [/quote]

Android的框架结构是不允许非UI Thread去更新相关Thread的,只能使用Handler或AsyncTask.

可以的。

final Runnable myLongTimeJob = new Runnable() {
public void run() {
someMethodHere();
}
};

new Thread() {
public void run() {
_messageHandler.post(myLongTimeJob);
}
}.start();

AsyncTask也是可以的,
执行UI更新要在onPostExecute中作。

上述的执行都在UI Thread(控制好取数据的先后逻辑,基本不会出现UI不能响应), 如果想要更好的效率就单独作Service吧。

可以参考: [url]http://zhangkun716717-126-com.iteye.com/blog/779025[/url]

楼上正解,因为android本身就是单线程模型,启动的UI线程即是我们的主线程,而ui的更新等等就只能在主线程中操作,此时的Handler配合Thread就可以很好的达到阻塞效果。
如果是网络请求等耗时操作,建议最好使用AsyncTask进行处理,因为它有更好的控制性,例如可以进行该Task的手动取消,相对而言,线程就不是那么好控制了。
另外,关于内存消耗,AsyncTask要比普通线程消耗更多。
希望对楼主有所帮助。

Android的框架结构是不允许非UI Thread去更新相关View的,只能使用Handler或AsyncTask.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问