代码:
package com.example.musicplayer;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import com.example.musicplayer.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
//工作线程的两种实现
private Work work;
private Work2 work2;
//计数值
private int num;
private int num2=100;
//判断是否计数
private boolean ok;
private boolean ok2;
//用于多线程与UI线程之间通信
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding=ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
initView();
}
private void initView(){
work=new Work();
work.start();
work2=new Work2();
new Thread(work2).start();
handler=new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
//通过msg.what辨别通信对象,另外可通过msg.obj传递对象或字符串,msg.arg传递数字
switch (msg.what){
case 100:
binding.textView.setText(num+"");
break;
case 200:
binding.textView2.setText(num2+"");
break;
}
}
};
//按钮点击控制计数
binding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ok=!ok;
}
});
binding.button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ok2=!ok2;
}
});
}
//通过继承Thread实现
private class Work extends Thread {
@Override
public void run() {
while (true){
while(ok) {
num++;
if (num > 100) num = 0;
try {
Message msg = Message.obtain();
msg.what = 100;
handler.sendMessage(msg);
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
//通过接口实现多线程
private class Work2 implements Runnable{
@Override
public void run() {
while (true){
while(ok2) {
num2--;
if (num2==0) num2=100;
try {
Message msg = Message.obtain();
msg.what = 200;
handler.sendMessage(msg);
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}