1.常见使用,在线程中处理一些逻辑,处理完毕后将需要的数据发回给主线程,让主线程对UI进行修改。
package com.lintao.handledemo; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.TextView; /** * 通过线程修改UI * @author admin * */ public class MainActivity extends Activity { private TextView mTvHandlerDemo; private Handler myHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTvHandlerDemo = (TextView)findViewById(R.id.tv_handler_demo); //实例化一个Handler myHandler = new MyHandler(); //实例化一个Runnable接口 MyThread m = new MyThread(); //启动该接口 new Thread(m).start(); } /** * 接受消息并处理消息 ,此Handler会与当前主线程一块运行,可以用来改变UI等 */ class MyHandler extends Handler { // 子类必须重写此方法,接受数据 @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); // 此处可以更新UI Bundle b = msg.getData(); String color = b.getString("text"); MainActivity.this.mTvHandlerDemo.setText(color); } } /** * 这里就可以用来处理主线程以后的工作,等完成后可以发送信息给主线程 * @author admin * */ class MyThread implements Runnable { public void run() { //隔了10s try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //构造Message Message msg = new Message(); Bundle b = new Bundle();// 存放数据 b.putString("text", "改变UI"); msg.setData(b); //发送信息 MainActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI } } }
xml文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.lintao.handledemo.MainActivity$PlaceholderFragment" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" android:id="@+id/tv_handler_demo" /> </RelativeLayout>
2.有时候可能需要延时去做一些事情,但并不涉及到复杂的操作的,可以使用下面两种方法
final boolean sendMessageDelayed(Message msg,long delayMillis);
final boolean sendEmptyMessageDelayed(int what,long delayMillis);
时间: 2024-10-02 14:31:07