问题描述
本身游戏有个主线程逻辑 我使用了handler 以及 AsyncTask 但是因为这两个其实是多线程的异步操作,android有没有单线程下的异步操作?比如联网的时候等候时间较长 导致无法响应UI线程的按键操作等- -! 问题补充:我用过了~但是这些实际上内部处理的时候是单开一个内部额外线程么?
解决方案
引用如果在这一个Thread 既保证联网不受阻塞同时也能响应触摸按键 的话 是不是就必需用另一个线程处理handel或是AsyncTask? Android的框架结构是不允许非UI Thread去更新相关Thread的,只能使用Handler或AsyncTask.
解决方案二:
Android的框架结构是不允许非UI Thread去更新相关View的,只能使用Handler或AsyncTask.
解决方案三:
楼上正解,因为android本身就是单线程模型,启动的UI线程即是我们的主线程,而ui的更新等等就只能在主线程中操作,此时的Handler配合Thread就可以很好的达到阻塞效果。 如果是网络请求等耗时操作,建议最好使用AsyncTask进行处理,因为它有更好的控制性,例如可以进行该Task的手动取消,相对而言,线程就不是那么好控制了。 另外,关于内存消耗,AsyncTask要比普通线程消耗更多。 希望对楼主有所帮助。
解决方案四:
上述的执行都在UI Thread(控制好取数据的先后逻辑,基本不会出现UI不能响应), 如果想要更好的效率就单独作Service吧。可以参考: http://zhangkun716717-126-com.iteye.com/blog/779025
解决方案五:
可以的。 final Runnable myLongTimeJob = new Runnable() { public void run() { someMethodHere(); }}; new Thread() { public void run() { _messageHandler.post(myLongTimeJob); } }.start(); AsyncTask也是可以的,执行UI更新要在onPostExecute中作。