android_handler(二)
这篇是讲 workthread 模拟向网络访问数据,获得数据后,返回 message 发送给 mainthread ,并修改 textview 的 text。
1、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="发送消息" />2、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); } } }
1
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。