Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在线程退出后调用回调-Android_Java_Android_Multithreading - Fatal编程技术网

Java 在线程退出后调用回调-Android

Java 在线程退出后调用回调-Android,java,android,multithreading,Java,Android,Multithreading,当第二个线程退出时,我找不到一种无阻塞的方法从主线程调用回调方法 我试图在while循环中使用加载.isAlive(),但它冻结了屏幕 public class MainActivity extends AppCompatActivity { private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCr

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

我试图在while循环中使用
加载.isAlive()
,但它冻结了屏幕

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
    }
}
public类MainActivity扩展了AppCompatActivity{
私人ProgressBar ProgressBar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar=findViewById(R.id.load\u Open\u screen);
线程加载=新加载BarThread();
加载.start();
}
私有类LoadingBarThread扩展线程{
@凌驾
公开募捐{

对于(int i=0;i使用一个Handler对象,在run()函数的末尾,向该处理程序发布一个Runnable。让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();
           }
        });
    }
}
私有类加载BarThread扩展线程{
Handler=newhandler();
@凌驾
公开募捐{
对于(int i=0;像这样的东西?