您的位置:首页 > 其它

Handler在主线程创建和在子线程创建的示例(18)

2016-02-27 00:00 274 查看
摘要: 利用Handler来实现UI线程的更新的,Handler一般运行在主线程(UI)中,也可以在子线程中运用,但建议一般在主线中运用

//在主线程创建Handler,实现UI的更新,以下是一个例子
public class MainActivity extends Activity {
private TextView text_show;

// 在主线程中创建消息Handler
// 主线程创建方式
Handler handler = new Handler() {
// 要重写里面的方法
public void handleMessage(android.os.Message msg) {
// 跟新UI,设置textview
if (msg.what == 1) {
text_show.setText((String) msg.obj);
}
};

};// 注意这里要分号

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text_show = (TextView) this.findViewById(R.id.text_show);
}

public void sendMessage(View view) {
// 耗时工作在子线程,然后向主线程传递数据
new Thread(new Runnable() {

@Override
public void run() {
// Message对象可以通过new出来,但不建议,通常使用 Message.obtain() 或
// Handler.obtainMessage() 方法来从消息池中获得空消息对象,以节省资源;
Message message = Message.obtain();
message.what = 1;
message.obj = "这是子线程,请接收";
// 封装完数据发送给主线程
handler.sendMessage(message);

}
}).start();
}
}

//在子线程运用的例子
public class SecondActivity extends Activity {
private TextView text_show;

// 在子线程中创建消息Handler
// 子线程创建方式
private Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text_show = (TextView) this.findViewById(R.id.text_show);
new Mythread().start();
}

public void sendMessage(View view) {

Message message = Message.obtain();
message.what = 1;
message.obj = "这是主线程在发送,请接收";
// 封装完数据发送给子线程
handler.sendMessage(message);

}

// Handler在子线程张处理消息
class Mythread extends Thread {
@Override
public void run() {
// 1.创建looper
Looper.prepare();
handler = new Handler() {
// 要重写里面的方法
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Log.i("MainActivity", (String) msg.obj);
break;

}
}

};// 注意这里要分号
// 3.循环读取MessageQueue
Looper.loop();

}

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