Android中的Handle的使用与理解

时间:2025-01-31 07:57:15

本文主要记录Android开发中Handle的作用

一个应用程序打开时,linux都会为其创建一个进程process,包含了主线程(UI线程),handle的作用主要是 当需要费时间的操作时,可以使界面ui同主线程一起运行,费时间的操作在子线程中运行
接下来用三个例子来使用handle(第三个才是使用handle的好例子)

1. 延迟使用Toast

这个就是单纯的用handle对象把runnable中的东西运行起来

  1. 创建handle对象
  2. 创建runnable对象
	Handler handler_toast;
    Runnable run_toast = new Runnable() {
        @Override
        public void run() {
            (,"延迟显示toast",Toast.LENGTH_SHORT).show();
        }
    };
  1. 在主线程中使用handle的postAtTime()方法,将handle与runnable对象联系起来
//主线程
handler_toast.postAtTime(run_toast, ()+5000);

2.延迟计数器

  1. 创建handle对象
  2. 创建runnable对象
    这里出现了循环操作,主线程中调用handle的第一次处理runnable,之后有runnable自己调用自己
	Runnable run_count = new Runnable() {
        @Override
        public void run() {
            text_count.setText("count: " + i);
            i++;
            handler_count.postDelayed(run_count,1000);
        }
    };
  1. 主线程中使用handle调用
 handler_count.postDelayed(run_count,1000);

3. 更新进度条

这个涉及到循环的操作,主要使handle与runnable中循环,使用sendMessage与post两个方法之间进行通讯。在runnable中运行费时间的代码然后在handle中更新界面.
创建handler,重写handleMessage()方法,在其内容中写要显示的界面
创建Runnable,在run中写费时间的代码,之后通过handle对象调用sendMessage()方法,发送消息到handle
要实现循环操作,就需要在handle中调用post()方法回到run中去

1.创建Handler对象,重写handlerMessage(Message msg)方法,写出要显示的东西

	Handler handler_progressbar = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            int index = msg.arg1;
            if(index == 100)
                removeCallbacks(run_progressbar);
            (index);
            handler_progressbar.post(run_progressbar);
        }
    };

2.创建runnable对象,实现run()方法,写入费时间的代码

	Runnable run_progressbar = new Runnable() {
        @Override
        public void run() {
            try {
                (1000);
            } catch (InterruptedException e) {
                ();
            }
            count = count + 10;
            Message msg = handler_progressbar.obtainMessage();
            msg.arg1 = count;
            handler_progressbar.sendMessage(msg);
        }
    };
  1. 主线程中调用
 handler_progressbar.sendMessage(msg);