android Handler用法

一、Handler用处

一般在主线程中定义,用于与子线程数据通信,主线程一般用于UI的更新操作,如果放在子线程中是很危险的,比如文件上传、下载等操作,这些耗时的操作放在主线程中会导致程序卡住,如果超过五秒钟系统会强制关闭进程并给一个强制关闭的提示,此时应该把这些操作放在一个子线程中,待操作完成后用Message给Handler发一个消息,然后Handler去处理这个消息并配合主线程更新UI。

二、Handler实例

实现的功能:单击一个Create_thread Button创建一个子线程,在子线程中传递一个Message给Handler,Handler处理该Message,并把Message中的保存的字符取出来,更新到Create_thread控件文字上,单击Start_Activity Button 使用Handler的postDelayed方法启动另外一个子线程,在该子线程中启动另外一个Activity界面。

activity_main.xml

<LinearLayout 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:orientation="vertical"> 
       
     <Button
        android:id="@+id/Create_thread"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="OnclickButton"
        android:textSize="17sp"
        android:text="create a thread" />
     
      <Button
        android:id="@+id/Start_Activity"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="OnclickButton"
        android:textSize="17sp"
        android:text="Start a Activity" />
</LinearLayout>

Handler实现

private Handler mHandler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    switch(msg.what){
    case MSG_ID_0:
    {
      Bundle b = msg.getData();
      String text1 = b.getString("buttonText");
      Button btn = (Button)findViewById(R.id.Create_thread);
      btn.setText(text1);
    }
    break;
   }
   super.handleMessage(msg);
   }
};

子线程实现:

class MyThread implements Runnable {
    public void run() {
      try {
              Thread.sleep(1000);
           } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
       Message msg = mHandler.obtainMessage(MSG_ID_0);
       Bundle b = new Bundle();// 存放数据
       b.putString("buttonText", "Text From Mythread");
       msg.setData(b);
       msg.sendToTarget();
   }
}

控件响应函数,这里采用了对所有控件的统一处理方法

public void OnclickButton(View target)
{
  switch(target.getId()) {
  case R.id.Create_thread:
  {
    MyThread m = new MyThread();
    new Thread(m).start();
  }
  break;
  case R.id.Start_Activity:
  {
    new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
        Intent intent = new Intent(MainActivity.this, OtherActivity.class);
         startActivity(intent);
         MainActivity.this.finish();
      }
    }, 2000);
  }
  break;
  }
}

源码下载地址:http://download.csdn.net/detail/m370809968/6379669


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值