• Android Handler+Thread实现更新Ui


    Handler类的主要作用有两个:

    1.       在新启动的线程中发送消息

    2.       在主线程中获取、处理消息

    这个过程设计一个问题:新启动的线程何时发送消息呢?主线程何时去获取并处理消息呢?

    为了让主线程能“适时”地处理新启动的线程所发送的消息,显然只能通过回调的方式来实现,开发者需要做的就是,重写Handler类中处理消息的方法,当新线程发送消息时,Handler类中处理消息的方法将自动被回调。

    Handler类的方法比较多,现列举几个常用方法:

    1、voidhandleMessage(Message msg) ;用于处理消息的方法,该方法通常用于被重写

    2、final boolean  hasMessages(int what) :检查消息队列中是否包含参数what为指定值的消息

    3、final boolean  hasMessages(int what, Object object):检查消息队列中是否包含参数what为指定值且参数object为指定对象的消息

    4、final Message  obtainMessage():从消息池中获取消息

    5、final boolean  sendEmptyMessage(int what):发送空消息

    6、final boolean  sendEmptyMessageDelayed(int what, long delayMillis):指定多少毫秒之后发送空消息

    7、final boolean  sendMessage(Message msg):立即发送消息

    8、final boolean  sendMessageDelayed(Message msg, long delayMillis):指定多少毫秒之后发送消息

     

    程序通过上面几个方法,就可以实现方便的实现消息传递了!

    代码

    package com.example.handlerdemo;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.Menu;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        private String TAG="MainActivity";
        private TextView view1;
        private int MESSAGE=1;
        private String mess="更新中...";
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            view1=(TextView)findViewById(R.id.view1);
            thread.start();
            
        }
    
        Handler handler=new Handler()
        {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                case 1:
                    view1.setText(mess);
                    break;
    
                default:
                    break;
                }
            };
        };
    
        Thread thread=new Thread()
        {
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    try {
                        sleep(2000);
                        mess+=i+",";
                        //发送消息
                        Message message=new Message();
                        message.what=MESSAGE;
                        handler.sendMessage(message);
                        Log.i(TAG, i+"");
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                    
                }
            }
        };
        
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }

    布局文件中一个 TextView用来显示,运行之后,可以看到UI不断更新中

  • 相关阅读:
    软件架构自学笔记-- 转载“腾讯数据库专家雷海林分享智能运维架构”
    软件架构自学笔记-- 架构设计与安全控制
    软件架构自学笔记——什么样的架构才是好的架构
    软件架构自学笔记----分享“去哪儿 Hadoop 集群 Federation 数据拷贝优化”
    软件架构自学笔记---架构分析
    软件架构自学笔记——非功能特性
    软件架构自学笔记——常见的软件架构(https://jiajunhuang.com/articles/2018_09_16-common_software_archtecture_pattern.md.html)
    微服务化的基石——持续集成
    微软开源大规模数据处理项目 Data Accelerator
    vs2019 cdkey 秘钥
  • 原文地址:https://www.cnblogs.com/zhoujian315/p/3188152.html
Copyright © 2020-2023  润新知