QuickThread
特性
任务扩展:支持延迟任务以及异步回调任务;
回调通知:当任务启动时与任务运行完毕后,有分别的生命周期作为通知;
线程切换:可制定是否回调主线程;
使用安全:当线程出现异常。能自动将catch异常信息传递给用户,避免出现crash;
lastVersion =
依赖
compile 'com.xwdz:QuickThread:$lastVersion'
创建QuickPool实例
QuietPool sCache = new QuietPool.Builder()
//createXXX
.createCached()
.build();
QuickThread默认提供了了一个统一的管理器维护所有的线程池AskQuietManager
使用QuickPool执行任务;
设置Callback
QuietPool quickPool = AskQuietManager.getNetwork();
quickPool.setGlobalCallback(new GlobalCallback() {
@Override
public void onStart(String threadName) {
}
@Override
public void onCompleted(String threadName) {
}
@Override
public void onError(String threadName, Throwable t) {
}
});
Runnable任务
QuietPool quickPool = AskQuietManager.getNetwork();
quickPool.execute(new Runnable() {
@Override
public void run() {
}
});
同步Callable任务
Future syncFuture = AskQuietManager.getCache().submit(new QuickCallable("test") {
@Override
public String qCall() throws Exception {
Thread.sleep(10000);
return "this is Test";
}
});
try {
String result = (String) syncFuture.get();
} catch (Exception e) {
e.printStackTrace();
}
异步Callable任务
重点说一下第三个参数
isMainUICallback : 是否回调在主线程
AskQuietManager.getCache().async(new QuickCallable("name") {
@Override
public String qCall() throws Exception {
if (Looper.getMainLooper() == Looper.myLooper()) {
Log.e("TAG", "main Thread");
} else {
Log.e("TAG", "child Thread");
}
Thread.sleep(10000);
return "123123";
}
}, new Response() {
@Override
public void onSuccess(String s) {
Log.e("TAG", "s = " + s);
}
@Override
public void onError(Throwable e) {
}
}, true);
延时任务
//单位默认毫秒
AskQuietManager.getIO().delay(new Runnable() {
@Override
public void run() {
}
}, 1000);
//or
AskQuietManager.getIO().delay(new Runnable() {
@Override
public void run() {
}
}, 1000,TimeUnit.MILLISECONDS);
周期性执行一个任务
参数
说明
Runnable
任务
initialDelay
几秒之后开始执行
delay
周期性执行间隔时间
//单位默认毫秒
AskQuietManager.getIO().scheduled(new Runnable() {
@Override
public void run() {
}
}, 1000, 3000);
// or
AskQuietManager.getIO().scheduled(new Runnable() {
@Override
public void run() {
}
}, 1000, 3000,TimeUnit.MILLISECONDS);