当前位置:   article > 正文

Android 回调函数的使用 callBack 回调函数体执行所在线程_andorid 回调函数

andorid 回调函数

回调

public interface AListener {
    void onComplete(String a);
}

  • 1
  • 2
  • 3
  • 4

封装回调函数

public class UseCB {
    private AListener listener;

    private String TAG = "JJWorld.DoMethodA";

    public UseCB(AListener listener){
        this.listener = listener;
    }

    public void callCB(){
        Log.i(TAG,"somethingForCallBack 调用线程信息:" + Thread.currentThread().getId() + " " + Thread.currentThread().getName());
        listener.onComplete("当前线程为" + Thread.currentThread().getId() + " " + Thread.currentThread().getName());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

测试主程序

public class MainActivity extends AppCompatActivity {

    private ThreadPoolExecutor threadPoolExecutor;
    private static final String TAG = "JJWorld.MainActivity";
    private UseCB thirdTest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG,"调用线程信息:" + Thread.currentThread().getId() + " " + Thread.currentThread().getName());

        UseCB useCB = new UseCB(new AListener() {
            @Override
            public void onComplete(String result) {
                Log.i(TAG,"doMethodA 当前线程信息:" + Thread.currentThread().getId() + " " + Thread.currentThread().getName());
                Log.e(TAG, "result: " + result);
            }
        });

        useCB.callCB();

        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.i(TAG,"secondTest 调用线程信息:" + Thread.currentThread().getId() + " " + Thread.currentThread().getName());
                useCB.callCB();
            }
        },"Second Thread").start();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

结果

回调函数内部程序执行时所在线程为调用的线程,即调用listener.onComplete的线程。
在这里插入图片描述

输出日志

2023-05-19 10:55:28.719 3274-3274/cn.jj.callback I/JJWorld.MainActivity: 调用线程信息:2 main
2023-05-19 10:55:28.719 3274-3274/cn.jj.callback I/JJWorld.DoMethodA: somethingForCallBack 调用线程信息:2 main
2023-05-19 10:55:28.719 3274-3274/cn.jj.callback I/JJWorld.MainActivity: doMethodA 当前线程信息:2 main
2023-05-19 10:55:28.719 3274-3274/cn.jj.callback E/JJWorld.MainActivity: result: 当前线程为2 main
2023-05-19 10:55:28.719 3274-3715/cn.jj.callback I/JJWorld.MainActivity: secondTest 调用线程信息:34278 Second Thread
2023-05-19 10:55:28.719 3274-3715/cn.jj.callback I/JJWorld.DoMethodA: somethingForCallBack 调用线程信息:34278 Second Thread
2023-05-19 10:55:28.719 3274-3715/cn.jj.callback I/JJWorld.MainActivity: doMethodA 当前线程信息:34278 Second Thread
2023-05-19 10:55:28.719 3274-3715/cn.jj.callback E/JJWorld.MainActivity: result: 当前线程为34278 Second Thread

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

回调函数十张图

介绍了回调函数的执行线程问题。回调函数在回调函数执行的线程里执行回调具体函数。
https://blog.csdn.net/itcodexy/article/details/111027346

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/265114
推荐阅读
相关标签
  

闽ICP备14008679号