Android技术
文章平均质量分 92
JNI、binder
丽萨的托马斯
这个作者很懒,什么都没留下…
展开
-
使用匿名binder实现client向server端的死亡通知
匿名binder的一个常见使用场景分析。原创 2022-09-27 16:21:26 · 1979 阅读 · 2 评论 -
MediaCodec中的AHandler、ALooper和AMessage机制简单分析
一、 前言:Android媒体通路中,大量充斥着AHandler、ALooper和AMessage的消息机制,之前简单分析了一下java层的消息机制,而native层的消息机制同java层原理类似,但又有一些区别,所以单独拿来分析一下,在nuplayer和mediacodec中随处可见这种异步机制。三者的简单概括:AMessage:我们要发送的消息,类似于一个“包裹”,“邮件”;AHand...原创 2019-10-17 17:58:42 · 1426 阅读 · 1 评论 -
Android中Java层消息机制的简单分析
一、引言:Android中的消息机制主要是用于线程间通信,常见的应用场景有apk中,UI只能在主线程中更新,在子线程中是不能的,这个时候,就需要使用消息机制,让子线程通知主线程更新UI。Android中的消息机制不仅在java层大量使用,native更是频繁,比如媒体的stagefright框架,Android中消息机制的运转由四个部分联合实现,分别是Message、Handler、Looper...原创 2019-10-15 17:04:25 · 133 阅读 · 0 评论 -
Android中的binder机制分析二:以精简的语句来提炼binder
一、 个人心得:网上很多讲binder的书籍和博客,喜欢一上来就从智能指针开始,我个人觉得,对于binder机制的研究,没有必要去深入钻研智能指针,把binder中所有的sp和wp都当成普通的指针就行了,其次,另一个就是一上来开始分析源码, 然后大家就会被各种名词给混淆:BnService, BpService, BBinder, Service Manager, binder driver,...原创 2019-09-27 18:03:28 · 235 阅读 · 0 评论 -
Android中的binder机制分析一:写一个native层最简单的demo
myservice/├── Android.mk├── client│ ├── Android.mk│ ├── main_client.cpp│ └── Main_MyClient.cpp├── interface│ ├── IMyService.cpp│ └── IMyService.h└── service ├── Android.mk ├── Main_MyService.cpp ├── MyService.cpp └── M原创 2019-09-27 11:06:54 · 1024 阅读 · 0 评论 -
使用NDK进行JNI编程与实践五:使用C/C++代码回调java类中方法
一、需求:我们将本地方法和被调用的java类公共方法放在同一个类中,本地方法用于调用C/C++代码,在C/C++代码中实现逻辑,用于调用java中公共方法,公共方法中可添加打印之类的确认是否调用成功,逻辑梳理:java native method ---> C/C++ method ---> java public method二、示例:使用C++代码回调java的add函...原创 2019-09-18 11:57:33 · 416 阅读 · 0 评论 -
使用NDK进行JNI编程与实践四:数组类传参至C/C++的修改
java中本地方法:向java的本地方法中传入一个int型数组,在C/C++层将数组中的元素值各自 加10之后返回 /* JNI返回数组arrys并将每个元素的值加10 */ public native int[] intMathod(int[] arrys);C++代码实现:JNIEXPORT jintArray JNICALL Java_com_example_...原创 2019-09-18 11:16:08 · 178 阅读 · 0 评论 -
使用NDK进行JNI编程与实践三:在C/C++代码中修改java类中属性
一、修改java类中非静态属性:java类中代码: public String str = "hello"; /* JNI改变类中变量str的值 */ public native void changeStr();中间头文件省略,直接C++代码:JNIEXPORT void JNICALL Java_com_example_jnitest_JNITest_c...原创 2019-09-18 10:55:25 · 295 阅读 · 0 评论 -
使用NDK进行JNI编程与实践二:优化Android studio来进行ndk-build开发
一、 引入:在JNI开发中,使用javah和ndk-build组合来进行JNI开发的过程比较麻烦,这里介绍一下使用高版本的gradle优化JNI开发,我的环境如下:Android studio:3.5;gradle:5.4.1;可在任意工程的File->Project Structure查看:二、 优化,引入Link C++ Project With Gradle:点击fil...原创 2019-09-17 16:50:27 · 229 阅读 · 0 评论 -
使用NDK进行JNI编程与实践一:使用Android studio进行JNI开发
一、 环境需求:java是安卓应用开发的主要语言,但是有时候,我们没有办法直接调用安卓提供的java接口来实现对framework层以下的开发,这个时候,就需要JNI上场了,使用java本地接口,在下面利用C/C++实现对java本地接口的实现,关于JNI编程,网上的资料和博客很多,但是有的很零散,特别是使用的AS版本和gradle版本等,导致差异和可实用性不大,在实际的学习过程中遇到了很多坑,...原创 2019-09-17 16:22:06 · 244 阅读 · 0 评论