Handle机制方法调用
MainActivity.java
package com.example.handlepostdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Handler countHandler=new Handler();
int count=0;
final static String TAG="HANDLER_POST";
/**
* 线程1 启动一个Toast显示线程
*/
Runnable runnableToast=new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"hello toast",Toast.LENGTH_LONG).show();
}
};
/**
* 线程2 文本区的计数器线程
*
*/
Runnable runnableCount =new Runnable() {
@Override
public void run() {
textView.setText("count:"+String.valueOf(++count));
countHandler.postDelayed(runnableCount,1000);
}
};
/**
* 创建Handler消息处理对象
*/
Handler progressHandler =new Handler(){
public void handleMessage(Message message){
log("消息内容为:"+message.arg1);
progressBar.setProgress(message.arg1);
progressHandler.post(runnableProgress);
if(message.arg1>=100){
log("停止执行代码");
removeCallbacks(runnableProgress);
}
}
};
public void log(String str){
Log.i(TAG,str);
}
/**
* 线程3 更新进度条
* 并增加arg1
*/
Runnable runnableProgress=new Runnable() {
int i=0;
@Override
public void run() {
i=i+10;
Message message =progressHandler.obtainMessage();//获取message对象
message.arg1=i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressHandler.sendMessage(message);//吧消息放到消息队列
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.buttonShowToast).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
findViewById(R.id.button4).setOnClickListener(this);
findViewById(R.id.button5).setOnClickListener(this);
textView=findViewById(R.id.textView);
progressBar=findViewById(R.id.progressBar2);
}
TextView textView=null;
ProgressBar progressBar=null;
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.buttonShowToast:
//SystemClock.uptimeMillis() 当前系统执行到现在的时间 表示5秒后执行
countHandler.postAtTime(runnableToast, SystemClock.uptimeMillis()+5*1000);
break;
//开启
case R.id.button2:
//每一秒执行一次
countHandler.postDelayed(runnableCount,1000);
break;
//关闭
case R.id.button3:
//移除线程就可以停止计数器
countHandler.removeCallbacks(runnableCount);
break;
case R.id.button4:
//更新进度条
progressHandler.post(runnableProgress);
break;
case R.id.button5:
//停止进度条
progressHandler.removeCallbacks(runnableProgress);
break;
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button3"
app:layout_constraintVertical_bias="0.886" />
<Button
android:id="@+id/buttonShowToast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开启Toast"
app:layout_constraintBottom_toTopOf="@+id/button2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动"
app:layout_constraintBottom_toTopOf="@+id/button3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonShowToast" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button2" />
<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.499" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新进度条"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button3" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止进度条"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>