【Android】异步任务设置返回值
2019-07-30 本文已影响0人
小八八八八八八
我们知道通常情况下使用异步任务没有办法设置返回值,最近新学会一招,通过这个方法可以同步的获取在另一个线程执行代码的结果
public InstallResult installPackageSync(String apkPath, int flags) {
final ConditionVariable lock = new ConditionVariable();
final InstallResult[] out = new InstallResult[1];
installPackage(apkPath, flags, new InstallCallback() {
@Override
public void onFinish(InstallResult result) {
lock.open();
out[0] = result;
}
});
lock.block();
return out[0];
}
这里我们使用ConditionVariable来阻塞释放线程,用数组来存储方法结果
一个简单的例子
public void onClick(View view) {
Log.e("TAG", "点击了按钮");
AsyncTask.execute(new Runnable() {
@Override
public void run() {
final String result = simulationNet();
Log.e("TAG", "run result: " + result );
}
});
}
private String simulationNet() {
final ConditionVariable conditionVariable = new ConditionVariable();
final String[] result = new String[1];
new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(3000);
result[0] = "这是返回值";
conditionVariable.open();
}
}).start();
conditionVariable.block();
return result[0];
}
image.png