Android-Handler

主要方法

  1. post(Runnable)
  2. postAtTime(Runnable,long)
  3. postDelayed(Runnable,long)
  4. sendEmptyMessage(int)
  5. sendMessage(Message)
  6. sendMessageAtTime(Message,long)
  7. sendMessageDelayed(Message,long)

页面布局

添加一个进度条和按钮模拟文件下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
android:id="@+id/linear1"
android:layout_width="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">
<ProgressBar
android:id="@+id/progress"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:progress="0"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="下载"
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

程序设计

创建Handler对象,并重写它的handleMessage方法

1
2
3
4
5
6
7
8
9
//  创建Handler线程并重写handleMessage方法
Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
// 接收msg中的参数并设置进度条的进度
progress.setProgress(msg.arg1);
}
};

在方法中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//  子线程
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100;i++){
// 创建Message对象
Message message = new Message();
// 设置message的第一个参数
message.arg1 = i+1;
// 向Handler发送消息
handler.sendMessage(message);
try {
// 暂停1秒。模拟下载
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();