前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

作者头像
韩曙亮
发布2023-03-29 18:08:38
1.1K0
发布2023-03-29 18:08:38
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、判定当前线程是否是主线程


在 Android 中 , 如果要判定当前线程是否是主线程 , 可以使用如下方法进行判定 ;

调用 LoopergetMainLooper() 静态方法获取 mainLooper , 调用 LoopermyLooper() 静态方法获取 myLooper , 对比二者是否相等 ;

Looper.getMainLooper() 方法获取的总是本进程的主线程 Looper 对象 ;

Looper.myLooper() 方法获取的是当前 Looper 线程的 Looper 对象 ,

如果当前线程是主线程 , 那么这两个 Looper 对象是相同的 ;

代码语言:javascript
复制
        // 判断当前线程是否是主线程
        //      获取 mainLooper 与 myLooper 进行比较 , 如果一致 , 说明该线程是主线程
        boolean isMainThread = false;
        // 下面的情况下 , 线程是主线程
        if (Looper.getMainLooper() == Looper.myLooper()) {
            isMainThread = true;
        }

二、子线程中执行主线程方法


获取主线程的 Looper , 通过 Looper 创建对应的 Handler , 然后通过该 Handler 向其发送 Runnable 任务即可 ;

一个线程只能有一个 LooperMessageQueue , 但是可以有多个 Handler ;

其中 MessageQueue 封装在 Handler 中 ;

代码语言:javascript
复制
                    // 将订阅方法放到主线程执行
                    // 获取主线程 Looper , 并通过 Looper 创建 Handler
                    Handler handler = new Handler(Looper.getMainLooper());
                    // 在主线程中执行订阅方法
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            invokeMethod(subscription, event);
                        }
                    });

三、主线程中执行子线程方法


可以直接创建 Thread 线程并执行 ;

也可以创建 ExecutorService 线程池 , 执行线程任务 ;

代码语言:javascript
复制
    /**
     * 线程池
     */
    private final ExecutorService executorService = Executors.newCachedThreadPool();

                    // 在线程池中执行方法
                    executorService.execute(new Runnable() {
                        @Override
                        public void run() {
                            invokeMethod(subscription, event);
                        }
                    });
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、判定当前线程是否是主线程
  • 二、子线程中执行主线程方法
  • 三、主线程中执行子线程方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档