java - 如何在android中实现回调?

标签 java android multithreading callback

也许我对这个话题的了解太少了,“​​回调”这个词不在这里,抱歉。

如果我在任何类/Activity/其他线程中启动一个线程,并且在完成后我希望它从启动该线程的实例(类/Activity/其他线程)中执行一些其他代码,我该如何实现?

目前,我是这样做的:

这是伪代码。

// Method inside class/activity/other thread
private void startThread(){
    MyThread thread = new MyThread(this);
    thread.start();
}

在线程内部

public class MyThread extends Thread{
    private (class/activity/other thread) instanceAbove;

    public MyThread ( (class/activity/other thread) instanceAbove){
        this.instanceAbove = instanceAbove;
    }

    public void run(){
        //Do some stuff
        finish();
    }

    public void finish(){
        instanceAbove.MyThreadFinishMethod();
    }

}

我认为这不是一个好方法,但是你能举个例子吗?

使用接口(interface)适用于 AlertDialog,因为我可以使用 onAppend()。但是,在这种情况下,我不知道如何使用它们。

最佳答案

您可以轻松地使用接口(interface) 并相应地处理来自调用 Activity/类/其他线程的回调。这是一个例子。

首先定义一个如下所示的接口(interface)。

public interface ThreadFinishListener {
    void onFinish();
}

让我们假设您正在从 Activity 中实例化一个 Thread。因此,在您的 Activity 中实现监听器,如下所示。

public class MainActivity extends AppCompatActivity implements ThreadFinishListener {
    // .... Other functions in your activity 

    @Override
    void onFinish() {
        // Do something when the Thread is finished and returned back to the activity
        // This is actually your callback function. 
    }
}

现在修改Thread 类的构造函数,以便将监听器传递给它。

public class MyThread extends Thread {
    private ThreadFinishListener listener; 

    public MyThread(ThreadFinishListener listener){
       this.listener = listener;
    }

    public void run(){
        //Do some stuff
        finish();
    }

    public void finish() {
        // This will invoke the function call in your activity
        listener.onFinish();
    }
}

现在在初始化您的 Thread 时,您可能希望按如下方式将监听器传递给它。

MyThread thread = new MyThread(this);
thread.run();

我希望这就足够了。

关于java - 如何在android中实现回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57620618/

相关文章:

java - 我想从一个 Activity 调用两个 ContentView

java - 什么是NullPointerException,我该如何解决?

java - 动态jpql返回集合但如何将其分配给数据表?

java - 在 Android Q (API29) 及更高版本中将歌曲添加到播放列表会引发 SecurityException

java - 从方法中中断线程

ios - 如何在 iOS 8.3 中调试 syscall_thread_switch?

linux - 为什么我的代码在为性能分析 (-pg) 编译时,多线程运行速度比单线程运行速度慢?

java - 将 AWT 图像转换为 SVG 图像

java - 如何将 Text 对象居中到 JavaFX Stage 的正中心?

java - 彼此相邻的两个矩形不起作用 (Java)