首页 > 解决方案 > 从 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的方法,我就很高兴了,但是我没找到!

标签: androidandroid-handler

解决方案


创建一个监听器将是一个更好的方法,

创建一个像这样的监听器

public interface Listener<T> {
    void on(T arg);
}

并使用它来获取返回值


推荐阅读