package com.example.handlersecond;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
//从workThread向mainThread发送消息
public class MainActivity extends Activity {
private TextView mTextView;
private Button mButton;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new MyHandler();
mTextView = (TextView)findViewById(R.id.textViewId);
mButton = (Button)findViewById(R.id.buttonId);
ButtonClick l = new ButtonClick();
mButton.setOnClickListener(l);
}
//点击按钮时触发创建线程事件
class ButtonClick implements OnClickListener{
@Override
public void onClick(View arg0) {
netWorkThread t = new netWorkThread();
t.start();
}
}
//创建一个工作线程,按钮将启动该线程
class netWorkThread extends Thread{
@Override
public void run() {
try {
sleep(2 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("name:" + Thread.currentThread().getName());
//模拟S的值更新到TextView中去
String s = "更新该字符串到TextView中";
//mTextView.setText(s);
//这样做是错误的,只能在mainThread中更新UI
Message msg = mHandler.obtainMessage();
msg.obj = s;
//sendMessage无论在主线程发还是在工作线程发都是可以的
mHandler.sendMessage(msg);
}
}
//处理消息,更新TextView
class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s = (String)msg.obj;
mTextView.setText(s);
}
}
}
Handler(15):工作线程向主线程发送消息
最新推荐文章于 2021-05-27 03:02:38 发布