首页 > 解决方案 > 线程退出后调用回调 - Android

问题描述

当我的第二个线程退出时,我找不到从主线程调用我的回调方法的非阻塞方式。

我试图loading.isAlive()在一个while循环中使用它,但它冻结了屏幕。

public class MainActivity extends AppCompatActivity {

    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar = findViewById(R.id.load_opening_screen);
        Thread loading = new LoadingBarThread();
        loading.start();
    }

    private class LoadingBarThread extends Thread {
        @Override
        public void run() {
            for (int i=0;i<=100;i++) {
                progressBar.setProgress(i);
                try {
                    Thread.sleep(40);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private void callback(){
        // start a new activity for example
    }
}

当 ProgressBar 达到 100 时,我想开始一项新活动。

标签: javaandroidmultithreading

解决方案


使用 Handler 对象并在 run() 函数结束时,将 Runnable 发布到该 Handler。让 Runnable 调用回调方法。处理程序将在其附加的线程上执行它(无论它是在哪个线程上创建的)。

所以你的新课程看起来像:

private class LoadingBarThread extends Thread {
   Handler handler = new Handler();
    @Override
    public void run() {
        for (int i=0;i<=100;i++) {
            progressBar.setProgress(i);
            try {
                Thread.sleep(40);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        handler.post(new Runnable() {
           public void run() {
             callback();
           }
        });
    }
}

推荐阅读