android - 从 android 处理程序返回值
问题描述
我有两个线程threadA和主线程(UI线程),我在主线程中从threadA发布一个runnable,但我需要返回结果。我这样解决问题:
public class MainActivity extends AppCompatActivity {
private ScreenView mScreenView;
private final Handler mHandler = new Handler(Looper.getMainLooper());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
mScreenView = findViewById(R.id.screen_view);
Thread threadA = new Thread(() ->{
//do work
String res = getPos();
//do another work
}); threadA.start();
}
private String getPos() {
AtomicReference<String> res = new AtomicReference<>();
mHandler.post(() -> {
res.set(mScreenView.getPos());
});
//wait until the result will be ready
while (res.get() == null){}
return res.get();
}
}
这个解决方案效果很好!但是不知道行不行,或者有没有别的办法,如果能找到Handler类返回Future的方法,我就很高兴了,但是我没找到!
解决方案
创建一个监听器将是一个更好的方法,
创建一个像这样的监听器
public interface Listener<T> {
void on(T arg);
}
并使用它来获取返回值
推荐阅读
- android - 如何允许用户使用 Google maps API 和 Fire base 在空白地图上添加自定义标记
- powershell - 强制配置文件用户的注册计划作业
- regex - 正在选择负前瞻内的正则表达式字符串
- python - 从分组值的子集创建 matplotlib 图表时 For Loop 中的 ValueError
- java - 如何正确嵌入 YouTube 后台播放视频?
- swift - 添加约束时的 EXC_BAD_INSTRUCTION
- c++ - 如何修改我们必须在其中找到峰值元素的代码?
- wagtail - 在每个 Wagtail API 响应中包含一个自定义字段
- opencv - 无法为具有形状“(?,?,?,3)”的张量“image_tensor:0”提供形状(480、640、3)的值
- c++ - 如何将字符存储在整数数组中?