您的位置:首页 > 其它

Handle发送消息机制

2015-11-06 10:31 232 查看
/**
*
handle主要用于线程之间的通信,传递消息,数据等;ui线程底层封装了looper,可以直接new handle,在子线程中使用handle,

要先调用looper.prepare(),实例完handle,要调用looper.loop(),looper用来不停的循环传递消息,messageque携带message,

handle 收发消息,looper相当于传送带,messageque相当于货箱,handle相当于工人。

在主线程中 使用 handler,子线程像主线程发送消息

public class MainActivity extends Activity {

private Button btn1 ;

private Handler handler = new Handler(){
//从写handleMessage方法  处理 工作线程发送过来的消息
public void handleMessage(Message msg) {
int str1 = msg.arg1;
int str2 = msg.arg2;
String str3 = (String)msg.obj;
int str4 = msg.what;

Bundle bundle = msg.getData();

Log.i("==Tag==", "=Str1="+str1+"=str2="+str2+"=str3="+str3+"=str4="+str4+"==bundle="+bundle.getString("str"));
};
};
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn1 = (Button)findViewById(R.id.btn1);

btn1.setOnClickListener(new OnClickListener() {

@Override public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(){
@Override public void run() {
// TODO Auto-generated method stub
super.run();

//Message msg = new Message();//不能new  消耗内存
Message msg = Message.obtain();
msg.arg1 = 100;
msg.arg2 = 200;//传递int 类型数据
msg.obj = "sssss";//传递对象类型
msg.what = 1;//标志当前信息

//传递一个数据量较大的数据
Bundle bundle = new Bundle();
bundle.putString("str", "bundle值");
msg.setData(bundle);
handler.sendMessage(msg);//发送消息
}
}.start();
}
});
}

}

在子线程中使用handler,主线程向子线程发送消息,子线程要准备一个looper

public class MainActivity extends Activity {

private Handler handler;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

//开启子线程
public void start(View v){
new MyThread().start();
}

//主线程向子线程发送数据
public void send(View v){
Message msg = Message.obtain();
msg.what = 100;
msg.obj = "asdfghjkl";
handler.sendMessage(msg);

}

//自定义工作线程
public class MyThread extends Thread{
@Override public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare();//创建looper对象
//接受主线程 发送来的数据
handler = new Handler(){
@Override public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
int str = msg.what;
String str1 =(String)msg.obj;
Log.i("==TAG==", "==str=="+str+"==str1=="+str1);
}
};
Looper.loop();//使用loop而里的循环  取出数据
}
}

}
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: