Handler
android 只有主线程可以更新UI。
service与activity同属一个线程。他们都在主线程工作。耗时的操作必须放在线程运行。但是service跟activity可以同时申请handler来处理消息。
1.service activity全在主线程实例化handler
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if(msg.what==0){
// Toast.makeText(MainActivity.this, msg.obj.toString()+Thread.currentThread().getName(), Toast.LENGTH_SHORT).show();
Log.v("LOG", "我是Activity:"+msg.obj.toString()+Thread.currentThread().getName());
text.setText("我是Activity:"+msg.obj.toString()+Thread.currentThread().getName());
}
}
};
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if (msg.what == 0) {
Toast.makeText(Services.this, msg.obj.toString()+Thread.currentThread().getName(),
Toast.LENGTH_SHORT).show();
Log.v("LOG", "我是服务:"+msg.obj.toString()+Thread.currentThread().getName());
}
}
};
2.在线程中实例化handler分为涉及UI以及不涉及UI两种情况
1.不涉及UI可以自己申请自己的消息队列
new Thread() { public void run() { Looper.prepare(); threadhandler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0) { text.setText("我是线程:" + msg.obj.toString() + Thread.currentThread().getName()); // Toast.makeText(MainActivity.this, // msg.obj.toString()+Thread.currentThread().getName(), // Toast.LENGTH_SHORT).show(); Log.v("LOG", "我是线程:" + msg.obj.toString() + Thread.currentThread().getName()); } }; }; Looper.loop(); } }.start();
Looper.prepare(); Looper.loop();两个重要的声明,申请独立的消息泵消息推队列。
2.涉及UI仍然需要主线程的消息泵处理
new Thread() { public void run() { // Looper.prepare(); threadhandler = new Handler(getMainLooper()) { public void handleMessage(Message msg) { if (msg.what == 0) { text.setText("我是线程:" + msg.obj.toString() + Thread.currentThread().getName()); // Toast.makeText(MainActivity.this, // msg.obj.toString()+Thread.currentThread().getName(), // Toast.LENGTH_SHORT).show(); Log.v("LOG", "我是线程:" + msg.obj.toString() + Thread.currentThread().getName()); } }; }; // Looper.loop(); } }.start();
getMainLooper(); 申请主线程的消息泵
可能还涉及到post 也是同样的道理。
浙公网安备 33010602011771号