假如 我后台线程 下载 或者 别的什么任务, 而UI线程 在不停的和 用户交互,
请问下 UI线程 能喝后台线程通信么?
如果能,如何和后台线程通信?
请问下 UI线程 能喝后台线程通信么?
如果能,如何和后台线程通信?
解决方案 »
- 急!!!怎么对spinner下拉列表中的item进行各种操作???
- AlertDialog的onKey当按后退键的时候会执行两次?
- com.android.camera.NEW_PICTURE 这个广播在哪里?
- 谁用Achartengine做过树状图?
- 分享个当连续建相同的控件的时候的方法,顺便讨教下一些问题。。。
- android .setText出错,找了很多答案还是不知道原因
- ContactPlugin is never used locally是什么情况
- 如何给网站做android客户端?基本技术是什么?
- 如何获得ListView中某个项目的ImageView的图片呢
- 求genymotion(安卓模拟器)
- 在android里 子线程如何返回个对象给主线程?
- 呼出菜单指定样式的
也就是说,UI线程想执行A线程(某个class实现了runable)的函数fun,那么直接A的实例 a.fun()就行了
不过要注意不能阻塞,否则就会出现force close的窗口,所以一般是丢到handler,handler是消息队列的一种实现
可以google参考 “异步任务 下载”
so,你只需要在循环体的开始处添加一个变量,然后,由UI线程来更改这个变量,后台线程就知道了。不过,这种写法,只适合UI线程关闭后台线程的情况。
更加复杂的则是,让UI线程直接去访问后台线程的资源。访问是没问题的,但是要注意线程同步问题,当然1楼说的阻塞UI线程是不行的。遇到这个情况,就考虑在后台线程中建立Handler来处理。
这里有篇博客写的挺不错,你可以去看看http://www.cnblogs.com/playing/archive/2011/03/24/1993583.html
比如:
Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
//do something pd = new ProgressDialog(HomeActivity.this);
pd.setMessage(getString(R.string.start_app));
pd.show();
break; case 2:
break;
default:
break;
}
}
};在线程中:
run(){
mHandler.sendEmptyMessage(2);
}
在doBackground里面做请求网络操作,将随时获取的进度通过public进行发送,将处理完的数据放到onPostexe里面进行处理。