请教下 androidUI线程 怎么 通知后台线程

   阅读
请问下 androidUI线程 如何 通知后台线程?
假如 我后台线程 下载 或者 别的什么任务,

  而UI线程 在不停的和 用户交互,


  请问下 UI线程 能喝后台线程通信么?


  如果能,如何和后台线程通信?
 

------解决方案--------------------
线程跟线程间通信,由于是在同一个进程中,所以变量地址都是相同的,能直接访问
也就是说,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里面进行处理。
阅读