Hendler 常用方法(二)

来源:互联网 发布:短网址生成源码 编辑:程序博客网 时间:2024/05/17 07:33

1.Hendler的认识

    <1>Android提供给我们的一套更新UI的机制

     <2>消息处理机制,我们通过它来发送消息和处理消息

     Activity的生命周期的和Hendler密切相关,都是通过Handler发送Message来回调生命周期内的方法。(你可以跟进源码层去了解)

2.Hendler常用方法解析

    <1>Post(Runnable r)方法

            

<TextView    android:id="@+id/textname"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textSize="30sp"    android:text="Hello World!" />
public class MainActivity extends AppCompatActivity {    private TextView mtextTv;    private Handler handler = new Handler();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();        new Thread(){            @Override            public void run() {                try {                    Thread.sleep(1000);                    handler.post(new Runnable() {                        @Override                        public void run() {                            mtextTv.setText("你好!!");                        }                    });                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }.start();    }    private void init() {          mtextTv = (TextView) findViewById(R.id.textname);    }}

<2>PostDelayed()

<ImageView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/imageView"    android:layout_below="@+id/textname"    android:layout_centerHorizontal="true"    android:layout_marginTop="170dp" />
public class MainActivity extends AppCompatActivity {    private TextView mtextTv;    private ImageView mageTv;    private Handler handler = new Handler();    private int images[] ={R.drawable.ga,R.drawable.niy,R.drawable.yuan};    private int index;    private MyRunnable runnable = new MyRunnable();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mtextTv = (TextView) findViewById(R.id.textname);        mageTv = (ImageView) findViewById(R.id.imageView);        handler.postDelayed(runnable,1000);    }     class MyRunnable implements Runnable{         @Override         public void run() {             index++;             index = index % 3;//循环赋值             mageTv.setImageResource(images[index]);             handler.postDelayed(runnable,1000);         }     }}
<3>sendMessage()可以发送消息也可以发送空消息,也可以发送对象

public class MainActivity extends AppCompatActivity {    private TextView mtextTv;    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {           // mtextTv.setText(msg.arg1);            mtextTv.setText(msg.obj+"");//注意这块的获取obj的写法 ""        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mtextTv = (TextView) findViewById(R.id.textname); //       Message message = new Message();//            message.arg1 = 20;//        handler.sendMessage(message);        Message message = handler.obtainMessage();            Person person = new Person();            message.obj = person;        handler.sendMessage(message);        //handler.removeCallbacks();handler可以移除这块要发送的消息    }    class Person{        String name ="王二小";        int age = 19;        //从写toString()不让其乱码        @Override        public String toString() {            return "name="+name+"age="+age;        }    }}

0 0
原创粉丝点击