• Handler


    一、             Handler

    Activity代码:

    package org.demo.handler;

    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.ProgressBar;

    public class HandlerDemo extends Activity {

           private Button btn1;

           private Button btn2;

           private ProgressBar bar=null;

        /** Called when the activity is first created. */

        @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

            btn1=(Button)findViewById(R.id.btn1);

            btn2=(Button)findViewById(R.id.btn2);

            btn1.setOnClickListener(new Start());

            btn2.setOnClickListener(new End());

            bar=(ProgressBar)findViewById(R.id.bar1);

    }

    //声明一个Handler对象

    Handler handler=new Handler(){

    //覆写handleMessage方法

                  @Override

                  public void handleMessage(Message msg) {

                         // TODO Auto-generated method stub

                         bar.setProgress(msg.arg1);

                         handler.post(r);

                         super.handleMessage(msg);

                  }         

        };

        class Start implements OnClickListener{

                  public void onClick(View v) {

                         // TODO Auto-generated method stub

                         bar.setProgress(0);

                         bar.setVisibility(ProgressBar.VISIBLE);

                //调用handler的post的方法发送线程类

                         handler.post(r);

                  }

               

        }

       

        class End implements OnClickListener{

                  public void onClick(View v) {

                         // TODO Auto-generated method stub

                         handler.removeCallbacks(r);

                  }

               

    }

    //构造一个线程类

        Runnable r=new Runnable(){

               int i=0;

                  public void run() {

                          i=i+10;

                 //构造Message对象

                          Message msg=handler.obtainMessage();

                          msg.arg1=i;

                          try{

                                 Thread.sleep(3000);

                          }catch(Exception e){

                                 e.printStackTrace();

                          }

                //调用handler的sendMessage发送构造的message对象

                          handler.sendMessage(msg);

                          if(i==100){

                                 handler.removeCallbacks(r);

                                 

                                 bar.setVisibility(ProgressBar.GONE);                       

                          }

                  }

               

        };

       

    }

    二、Handler中使用Looper:

    package org.demo.handlerdemo2;

    import android.app.Activity;

    import android.os.Bundle;

    import android.os.Handler;

    import android.os.HandlerThread;

    import android.os.Looper;

    import android.os.Message;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.widget.Button;

    import android.widget.Toast;

    public class HandlerDemo2 extends Activity {

        /** Called when the activity is first created. */

        @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

            Button btn=(Button)findViewById(R.id.btn);

            btn.setOnClickListener(new OnClickListener(){

                         public void onClick(View v) {

                                //使用HandlerThread对象构造

                                 HandlerThread handler=new HandlerThread("t1");

                                 handler.start();

                   //使用Looper处理消息队列

                                 MyHandler myhandler=new MyHandler(handler.getLooper());

                                 Message msg=myhandler.obtainMessage();

                                 Bundle b=new Bundle();

                                 b.putString("name", "百度"+System.currentTimeMillis());

                                 msg.setData(b);

                                 //发送数据

    msg.sendToTarget();

                         }

                   

            });

          

        }

        class MyHandler extends Handler{

               public MyHandler(){

                      

               }

               public MyHandler(Looper loop){

                      super(loop);

               }

                  @Override

                  public void handleMessage(Message msg) {

                         // TODO Auto-generated method stub

                //接受数据并处理

                         Bundle b=msg.getData();

                         String s=b.getString("name");

                         Toast.makeText(HandlerDemo2.this, s+"--"+Thread.currentThread().getName(), Toast.LENGTH_LONG).show();

                         super.handleMessage(msg);

                  }

               

        }

    }

  • 相关阅读:
    [SDOI2016]排列计数
    Broken robot
    环路运输
    naptime
    Accumulation Degree
    选课
    没有上司的舞会
    金字塔
    Polygon
    石子合并
  • 原文地址:https://www.cnblogs.com/itfenqing/p/4429529.html
Copyright © 2020-2023  润新知