android_handler

幽沉谢世事,俯默窥唐虞。这篇文章主要讲述android_handler相关的知识,希望能为你提供帮助。
这篇记录 android 消息机制中。WorkThread 模拟向网络訪问数据,获得数据后,返回 message 发送给 MainThread ,并改动 TextView 的 text 的这种一个步骤。(MainThread ← WorkThread)。
步骤:
1、在 MainThread 中创建一个 handler 对象。复写 handlemessage() 方法。
2、WorkThread 调用 handermessage() 的 sendMessage() 方法发送消息到消息队列
3、looper 在消息队列中取出消息对象,交给 MainThread 的handlemessage() 方法处理。

代码:
【android_handler】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); } }}

效果:
android_handler

文章图片


欢迎交流  http://blog.csdn.net/ycwol/article/details/42066449









    推荐阅读