在Android中经常会用到多线程开发,最简单的做法是new一个Thread去执行,这种写法如果多的话,线程的创建和管理开销也是非常大的,在代码中lint也会有警告提示。现在介绍一个简洁的线程管理工具类。
代码如下:
import android.os.Handler;
import android.os.Looper;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TaskService {
private static volatile TaskService sTaskService;
private final ExecutorService mExecutorService;
private final Handler mHandler;
private TaskService(){
mExecutorService = Executors.newCachedThreadPool();
mHandler = new Handler(Looper.getMainLooper());
}
public static TaskService getInstance(){
if(sTaskService==null){
synchronized (TaskService.class){
if(sTaskService==null){
sTaskService = new TaskService();
}
}
}
return sTaskService;
}
public void doBackTask(Runnable runnable){
if(runnable!=null){
mExecutorService.submit(runnable);
}
}
public void doBackTaskDelay(final Runnable runnable, long delay){
if(runnable!=null){
if(delay<0){
delay = 0;
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mExecutorService.submit(runnable);
}
},delay);
}
}
public void postTaskInMain(Runnable runnable){
if(runnable!=null){
mHandler.post(runnable);
}
}
public Handler getHandler(){
return mHandler;
}
}
该工具类采用单例的实现方式,线程执行是用Executors.newCachedThreadPool()方式实现线程复用。
使用方式:
- 开线程执行任务:
TaskService.getInstance().doBackTask(new Runnable())
- 切换到主线程执行任务:
TaskService.getInstance().postTaskInMain(new Runnable());
- 延时执行多线程任务:
TaskService.getInstance().doBackTaskDelay(new Runnable(),3000);
网友评论