android_handler(二)
这篇记录 android 消息机制中。WorkThread 模拟向网络訪问数据,获得数据后,返回 message 发送给 MainThread ,并改动 TextView 的 text 的这种一个步骤。(MainThread ← WorkThread)。
步骤:
1、在 MainThread 中创建一个 handler 对象。复写 handlemessage() 方法。
2、WorkThread 调用 handermessage() 的 sendMessage() 方法发送消息到消息队列
3、looper 在消息队列中取出消息对象,交给 MainThread 的handlemessage() 方法处理。
代码:
layout:
<TextView
android:id="@+id/textViewId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="数据"/>
<Button
android:id="@+id/buttonId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/textViewId"
android:text="发送消息" />activity:package com.away.b_07_handler02;
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;
public class MainActivity extends Activity {
private TextView textView;
private Button button;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textViewId);
button = (Button) findViewById(R.id.buttonId);
handler = new MyHandler();
button.setOnClickListener(new ButtonListener());
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
System.out.println("handlerMessage ---->> :" + Thread.currentThread().getName());
String s = (String) msg.obj;
textView.setText(s);
}
}
class ButtonListener implements OnClickListener {
@Override
public void onClick(View arg0) {
Thread t = new NetworkThread();
t.start();
}
}
class NetworkThread extends Thread {
@Override
public void run() {
System.out.println("network ---->> :" + Thread.currentThread().getName());
// 模拟訪问网络,所以说当线程休眠时,首先休眠2秒钟
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 变量s的值,模拟从网络其中获取的数据
String s = "网络其中获取的数据";
// textView.setText(s); 这样的做法是错误的,由于在android系统其中,仅仅有mainthread其中才干操作UI
Message msg = handler.obtainMessage();
msg.obj = s;
// sendMessage()方法,不管是在主线程其中发送还是在workers thread其中发送,都是能够的
handler.sendMessage(msg);
}
}
}
效果:
欢迎交流 http://blog.csdn.net/ycwol/article/details/42066449
posted on 2017-07-11 08:55 cynchanpin 阅读(161) 评论(0) 收藏 举报
浙公网安备 33010602011771号