创建Handler
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case 1 : String str1 = msg.getData().getString("text1");//接受msg传递过来的参数
String str2 = msg.getData().getString("text2");//接受msg传递过来的参数
Log.i("lgq","..ab ==7....11......"+str1);
break;
}
}
};
传递参数
Message msg = new Message();
msg.what = 1;
Bundle bundle = new Bundle();
bundle.putString("text1","梅西的消息传递参数的例子!"); //往Bundle中存放数据
bundle.putString("text2","Time:2016-11-03"); //往Bundle中put数据
msg.setData(bundle);//mes利用Bundle传递数据
handler.sendMessage(msg);//用activity中的handler发送消息
handler子线程和主线程通讯
public class HandleActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private Handler mThreadHandler;
private Handler mMainHandler = new Handler(new Handler.Callback() {
// 主线程接收到子线程发送的消息
@Override
public boolean handleMessage(Message msg) {
if (msg.obj != null) {
Log.e(TAG, msg.obj.toString());
mThreadReplyText.setText("收到子线程回复:" + msg.obj.toString());
}
return true;
}
});
private EditText mMainEditText;
private TextView mThreadReplyText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.handleactivity);
mMainEditText = findViewById(R.id.main_edit_text);
mThreadReplyText = findViewById(R.id.thread_reply_text);
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
mThreadHandler = new Handler(new Handler.Callback() {
// 子线程接收到主线程发送的消息并回复
@Override
public boolean handleMessage(Message msg) {
if (msg.obj != null) {
Message reply = Message.obtain();
reply.obj = "主线程说\"" + msg.obj.toString()+"\"";
// 在子线程中使用主线程中的Handler对象的引用向主线程发送消息
mMainHandler.sendMessage(reply);
}
return true;
}
});
Looper.loop();
}
}).start();
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.main_send_button:
Message message = Message.obtain();
message.obj = mMainEditText.getText();
// 主线程向子线程发送消息:在主线程中使用子线程中的Handler对象的引用向子线程发送消息
if (mThreadHandler != null) {
mThreadHandler.sendMessage(message);
} else {
while (mThreadHandler == null) {
Log.e(TAG, "子线程还没有完成ThreadHandler的创建");
if (mThreadHandler != null) {
Log.e(TAG, "ThreadHandler创建完成!");
mThreadHandler.sendMessage(message);
}
}
}
break;
}
}
}
本文详细介绍了Android中Handler机制的工作原理及应用,包括如何通过Handler在主线程与子线程间进行消息传递,实现线程间的通信。展示了如何创建Handler对象、构造Message和Bundle来携带数据,并提供了完整的代码示例。
9451

被折叠的 条评论
为什么被折叠?



