Android C++系列:JNI中的Handler--ALooper

1. Android Handler回顾

在Android中,UI线程是一个很重要的概念。我们在日常开发中对UI的更新和一些系统行为,都必须在UI线程(主线程)中进行调用。我们在子线程更新UI时最常用的手段就是Handler,Handler的主要原理:

在这里插入图片描述

主要是有一个Looper不停的从队列读消息,子线程通过持有Handler向队列写消息,以此来实现线程通信。但让Looper线程不一定是主线程,子线程也可以通过Looper.prepare();来创建Looper,构建Handler时可以将Looper传入到Handler构造方法来和Looper绑定。

2. JNI中实现Looper

理论上我们日常开发中不会涉及JNI中更新UI的问题,就算需要也可以回调到Java层,在Java层切换。但是当我们遇到很多线程需要回调JNI,而JNI线程回调Java需要通过JavaVM来创建JNIEnv,每个线程都来AttachCurrentThread会带来性能上的开销,我们会想都通过一个线程回调Java来解决这个问题,这个时候是不是就开始怀念Java的Handler了?

我们可以手动实现一个队列来实现一个线程回调Java:

template <typename T>
class BlockingQueue
{
public:
    BlockingQueue()
            :m_mutex(),
             m_condition(),
     
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻口味

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值