引言
在软件开发中,经常会遇到耗时操作,有时候耗时操作会对主逻辑的运行时间有影响,但是耗时的操作又不需要实时反馈,就可以使用异步操作。比如日志的记录,启动程序时,也可以降一下启动时候的耗时操作,进行异步,先把程序启动起来,然后异步操作慢慢执行。
若依用法
常见的就是日志的记录,以登录为例:
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
AsyncManager.me()是一个线程池的单例,execute执行的是一个timetask方法。
项目实战
在某个项目中,可以将某些逻辑进行异步化。比如启动时候异步加载资源与异步执行业务逻辑。
// 案例1:
// 配置人脸检测器的激活
if (isFaceActive){
// 初始化人脸检测器
FaceEngineUtil faceEngineUtil = FaceEngineUtil.getInstance();
faceEngineUtil.activate(appId,sdkKey,activeKey,enginLibPath);
faceEngineUtil.initFaceEngine(enginLibPath);
FaceEngine faceEngine = faceEngineUtil.getFaceEngine();
AsyncManager.me().execute(new TimerTask() {
@Override
public void run() {
//批量注册人脸库中的人脸
faceEngineUtil.registerFaceImgPath(faceEngine,faceRepo);
}
});
}
// 案例2:
// 转化为jsonobject对象
JSONObject attendanceUploadJO = (JSONObject) JSON.toJSON(attendanceUpload);
// 获得当前对象
EventApiServiceImpl eventApiService = this;
AsyncManager.me().execute(new TimerTask() {
@Override
public void run() {
// 调用考勤 接口
eventApiService.uploadAttendanceInfo(attendanceUploadJO);
}
});
总结,不用非得到若依的framework组件中去写代码,直接在程序中进行异步即可。