请问下 androidUI线程 如何 通知后台线程? 假如 我后台线程 下载 或者 别的什么任务, 而UI线程 在不停的和 用户交互, 请问下 UI线程 能喝后台线程通信么? 如果能,如何和后台线程通信? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 线程跟线程间通信,由于是在同一个进程中,所以变量地址都是相同的,能直接访问也就是说,UI线程想执行A线程(某个class实现了runable)的函数fun,那么直接A的实例 a.fun()就行了不过要注意不能阻塞,否则就会出现force close的窗口,所以一般是丢到handler,handler是消息队列的一种实现 后台线程也是ui线程创建的,你直接在后台线程里给ui线程发handler消息,来处理主UI的更新。可以google参考 “异步任务 下载” 在写后台线程的时候,一般都是把run函数实现成一个循环体,这样后台线程才能在有需要的情况下退出。 so,你只需要在循环体的开始处添加一个变量,然后,由UI线程来更改这个变量,后台线程就知道了。不过,这种写法,只适合UI线程关闭后台线程的情况。 更加复杂的则是,让UI线程直接去访问后台线程的资源。访问是没问题的,但是要注意线程同步问题,当然1楼说的阻塞UI线程是不行的。遇到这个情况,就考虑在后台线程中建立Handler来处理。 后台线程和UI线程通信本质上是通过发送消息来实现的,实现的方式有最主要的两种Handler和AsyncTask这里有篇博客写的挺不错,你可以去看看http://www.cnblogs.com/playing/archive/2011/03/24/1993583.html 使用Handler比如: 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); } LZ是想实现下载进度的功能,这种功能在Android里最快捷好用的是使用AsyncTask类在doBackground里面做请求网络操作,将随时获取的进度通过public进行发送,将处理完的数据放到onPostexe里面进行处理。 android 开机密码是如何实现的? 选项卡切换的是activity1,从acticity1-->2后我再来回切换是还是现实activity2 如何锁定壁纸,滑动时壁纸不跟随移动? 耐力测试的时候,mmap映射失败,看log是地址一直在增加,求为什么? android程序安装路径 求protobuf中文资料并翻译下面一段英文 关于Android SDK2.1安装的问题 android2.2如何退出整个应用 Widget经常出错 WebView加载HTML,如何加载到指定位置 在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里面进行处理。