为了方便UI操作,Android提供了AsyncTask工具类,该类是基于Handler异步消息处理机制,只是Android帮我们做了封装
package com.example.test221113;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
private static final Executor pool = new ThreadPoolExecutor
(10, 20, 30, TimeUnit.SECONDS,new ArrayBlockingQueue<>(10));
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 打印main线程
System.out.println("===============" + Thread.currentThread().getName());
// 调用executeOnExecutor方法启动任务,pool:自定义的线程池,后面的不定长参数,作为AsyncTask.doInBackground方法的入参
new MyTaks().executeOnExecutor(pool, "hello", "world");
}
class MyTaks extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... strings) {
// 此处打印pool-1-thread-1线程
System.out.println("===============" + Thread.currentThread().getName());
StringBuilder sb = new StringBuilder();
for (String str:strings) {
sb.append(str);
}
return sb.toString();
}
@Override
protected void onPostExecute(String s) {
// 打印main线程, onPostExecute可以做一些UI操作,入参是doInBackground的返回值
System.out.println("===============" + Thread.currentThread().getName());
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
}
}