Android Handler

来源:互联网 发布:php做九九乘法表 编辑:程序博客网 时间:2024/06/06 00:29
1.Handler是一种android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息。
2.Hndroid在设计时,就封装了一套消息创建,传递,处理机制,如果不遵循这样的机制,就没办法更新UI信息的,就会跑出异常信息。
3.UI
更新Text:
import android.os.Handler;
private Handler handler = new Handler();
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            tv.setText("uppdate thread");
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }


            }
        }.start();
更新图片:
bug:
Error:Execution failed for task ':app:mergeDebugResources'.
> C:\Users\qihao\Desktop\Android\MyApplication\app\src\main\res\drawable\3.jpg:
Error: The resource name must start with a letter
Bitmap too large to be uploaded into a texture (4098x2304, max=4096x4096)
Code:
    private Handler handler = new Handler();
    private int images[] = {R.drawable.x, R.drawable.y, R.drawable.z};
    private int index;


    private MyRunable myRunable = new MyRunable();


    class MyRunable implements Runnable {
        @Override
        public void run() {
            index++;
            index = index % 3;
            iv.setImageResource(images[index]);
            handler.postDelayed(myRunable, 1000);
        }
    }


onCreate:
handler.postDelayed(myRunable, 1000);
4.Message
seedMessage:
   private Handler handler = new Handler() {
       @Override
       public void handleMessage(Message msg) {
           tv.setText(""+msg.arg1+"-"+msg.arg2);
       }
   };


        new Thread(){
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    Message message = new Message();
                    message.arg1 = 12;
                    message.arg2 = 15;
                    handler.sendMessage(message);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
5.Handle 内部机制
内部跟Looper进行关联,Looper是个死循环,包含一个消息队列也就是MessageQueue。
handler负责发送消息;
Looper负责接收Handler发送的消息,并直接把消息回传给handler自己;
MessageQueue就是一个存储消息的容器;
6.Ctrl 学会看源码
0 0