本文主要记录Android开发中Handle的作用
一个应用程序打开时,linux都会为其创建一个进程process,包含了主线程(UI线程),handle的作用主要是 当需要费时间的操作时,可以使界面ui同主线程一起运行,费时间的操作在子线程中运行
接下来用三个例子来使用handle(第三个才是使用handle的好例子)
1. 延迟使用Toast
这个就是单纯的用handle对象把runnable中的东西运行起来
- 创建handle对象
- 创建runnable对象
Handler handler_toast;
Runnable run_toast = new Runnable() {
@Override
public void run() {
(,"延迟显示toast",Toast.LENGTH_SHORT).show();
}
};
- 在主线程中使用handle的postAtTime()方法,将handle与runnable对象联系起来
//主线程
handler_toast.postAtTime(run_toast, ()+5000);
2.延迟计数器
- 创建handle对象
- 创建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);
}
};
- 主线程中使用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);
}
};
- 主线程中调用
handler_progressbar.sendMessage(msg);