【Android】异步任务设置返回值

我们知道通常情况下使用异步任务没有办法设置返回值,最近新学会一招,通过这个方法可以同步的获取在另一个线程执行代码的结果

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

你可能感兴趣的:(【Android】异步任务设置返回值)