AIDL-NullPointerException

Android AIDL跨进程通信实战:从接口定义到Service绑定与复杂数据传输 在Android开发中,跨进程通信(IPC)是实现应用模块化、系统服务交互及插件化架构的核心技术。其基本原理是通过Binder机制,在不同进程间建立通信通道,实现方法调用与数据交换。AIDL作为Android接口定义语言,正是这一机制的关键实现工具,它通过定义标准化的接口契约,自动生成序列化与代理代码,极大简化了IPC开发复杂度。在工程实践中,AIDL不仅支持基本数据类型传输,还能通过Parcelable协议处理复杂对象,结合Service绑定、死亡通知与权限控制,构建出稳定高效的进程间通信方案。本文以搭建 阅读详情

1、在断开连接时 重连

 ServiceConnection receverIdcard = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myIdBaeBinder = ReceverAidlInterface.Stub.asInterface(service);
            try {
                myIdBaeBinder.asBinder().linkToDeath(mDeathRecipient,0);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            myIdBaeBinder = null;

            autoBindAIDL();
        }
    };

2、调用 binder 对象是 nullpoint ,分析应该是 binder 代理对象nullPoint,所以,捕获异常重连。

定义局部变量,为了防止全部变量异步更改。

参考:http://www.gcssloop.com/gebug/nullpointer-exception

try {
                    final ReceverAidlInterface mtempBinder = myIdBaeBinder;
                    if (mtempBinder != null) {
                        mtempBinder.setIdcard(idCardInfo,recData);
                    }else {
                        autoBindAIDL();
                    }
                }catch (NullPointerException e) {//增加 nullpoint判断 2018-12-7 09:32:55 因为 上面 if (myIdBaeBinder != null)之后还是 一直 null
//                        java.lang.NullPointerException: Attempt to invoke interface method 'void com.opzoon.face.standard.service.IIdBaseAidlInterface.setReadIdCard(boolean)' on a null object reference
//                        at android.os.Parcel.readException(Parcel.java:1546)
//                        at android.os.Parcel.readException(Parcel.java:1493)
//                        at com.sdk.cudaalgorithm.ReceverAidlInterface$Stub$Proxy.setRecMsg(ReceverAidlInterface.java:122)
//                        at com.opzoon.face.standard.service.ByIdBaseService.getInputStream(ByIdBaseService.java:838)
//                        at com.opzoon.face.standard.service.ByIdBaseService$ThreadRun.run(ByIdBaseService.java:339)
                    autoBindAIDL();
                }
   

3、重新连接,开启异步与延时,防止并发

 private void autoBindAIDL() {
        try {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    synchronized (ByIdBaseService.class){
                        try {
                            Thread.sleep(100);//延时防止 循环创建binder 还没有准备好。
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        Intent i = new Intent(ByIdBaseService.this, RecevierIdcardService.class);
                        bindService(i, receverIdcard, BIND_AUTO_CREATE);
                    }
                }
            }).start();
        }catch (Exception e){
            mLogger.e("autoBindAIDL--Exception "+Log.getStackTraceString(e));
            e.printStackTrace();
        }
    }

 

 

 

 

 

 

 

从BIOS到路由器:深入拆解SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)奥秘 本文深入解析SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)技术,从BIOS到路由器的应用场景出发,详细介绍了其架构精髓、典型连接方案、时序设计及性能优化方法。通过实际案例和参数对比,帮助开发者掌握NOR Flash在嵌入式系统中的关键作用与设计技巧,提升电路设计效率与可靠性。 阅读详情

相关推荐

《UE4游戏开发》之 《音效系统的实现》

音效系统需要负责管理什么事情: 1.1 确定声音控制的分类:如背景音乐、技能音效、界面音效、角色配音等,不同游戏对声音有不同的分类 1.2 控制每个分类的声音的开启与关闭,以及调节每个分类声音的大小 解决如何分类: 2.1 首先需要知道ue4为声音分类提供了什么:SoundClass通常需要一个根分类【SC_RPG_Master】,便于总体控制音效,以及指定引擎默认启动的音效 打开SoundClass资产【SC_RPG_Master】,对根控制的设置,将逐级传递并按比例进行设置,以此达到控制一类声音的目的.

qq_21919621的博客 2126

aidl的学习(1)aidl中java.lang.RuntimeException: Didn‘t create service “XXX“

Log . d(TAG , "basicTypes: " + "我是服务端数据信息");} }

qq_51108920的博客 647

DSP28335做FFT傅里叶变换

1. 看了一下例程,居然没有FFT的例程,难道这个DSP28335不能做FFT吗?对了C2000系列是有C2000 ware这个库的。方便很多,不过目前不确定在C5000上运行的FFT能直接迁移到DSP28335上行不?测试了一下,是可以的,因为都是用的math.h,下面的一些正弦函数基本一样的 2. 硬件简介,其中DSP28335和TLV320AIC23B之间使用I2C接口进行寄存器配置,...

weixin_30390075的博客 3331

AIDL 发生异常的原因

搬家后的博客链接: IT客栈 www.itkezhan.org 我建立了两个project。一个是activity 的 ,一个是service 的。 在进行两个project通信时,应该有以下几点注意: 1.在activity project中引入service project中aidl文件。注意引入后的aidl文件包名应该和service中aidl文件包名保持一致。 2.se

failure01的专栏 2656

PostgreSQL+Citus分布式集群实战:从零搭建到性能调优

本文详细介绍了如何从零开始搭建并优化PostgreSQL+Citus分布式数据库集群。内容涵盖集群规划、源码编译安装、Citus扩展部署、节点配置、分布式表创建以及核心性能调优策略,为应对海量数据增长提供了完整的部署指南和实战解决方案。

oo7890的博客 627

Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作指南

本文详细介绍了Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作流程与技巧。内容涵盖从开机预热、校准(SOLT/ECal)、参数设置(频率、点数、功率、IFBW)到连接测量、数据保存分析的全过程,并分享了夹具去嵌入、时域分析等进阶功能与常见问题避坑指南,旨在帮助工程师获得精准可靠的散射参数测试结果。

kotlin6android的博客 401

Android AIDL客户端调用服务端方法报空指针问题解决

Android 使用AIDL报空指针异常的解决

qq_45110467的博客 1914

K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

🔴 K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3万+

AIDL出现空指针的解决方法

使用AIDL进行远程调用的时候,有可能会遇到出现空指针异常。 ERROR/AndroidRuntime(9435): FATAL EXCEPTION: main ERROR/AndroidRuntime(9435): java.lang.NullPointerException ERROR/AndroidRuntime(9435): at android.os.Parcel.readException(Parcel.java:1328) ERROR/AndroidRuntime(9435): at an

wuyuzuixing的博客 1112

8、鼠疫流行过程的计算机建模介绍

本博文介绍了一种基于概率细胞自动机和蒙特卡罗方法的计算机模型,用于模拟由大沙鼠传播的鼠疫流行过程。结合GIS和遥感技术,该模型能够分析鼠疫在不同聚居地类型和季节变化下的传播特征,揭示了群落密度、分布及流行接触率对鼠疫传播的影响。研究还验证了模型与自然流行过程的一致性,并探讨了鼠疫在宿主数量低谷时的持续机制。模型为鼠疫防控和流行病研究提供了定量分析工具。

x2y3z4a5b的博客 107

[23]-->变长SPI接口

然而,FPGA技术复杂,学习门槛较高,许多人(初学者或学生)在学习过程中面临诸多挑战。(1)模式0:SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 0,CPHA=0;(2)模式1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换,CPOL= 0,CPHA=1;(3)模式3:SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 1,CPHA=1;

m0_46498597的博客 178

关于使用AIDL出现空指针的解决办法

使用AIDL进行远程调用的时候出现的空指针异常,解决过程稍微有点小曲折。具体安下 1.先贴异常信息 1 ERROR/AndroidRuntime(9435): FATAL EXCEPTION: main 2 ERROR/AndroidRuntime(9435): java.lang.NullPointerException 3 ERROR/AndroidRuntime(9435): at android.os.Parcel.readException(Parcel.java:1328) 4 ERROR

tq501501的博客 2013

推荐系统(十六):基于ESMM的商品召回/推荐系统

ESMM(Entire Space Multi-Task Model)是阿里巴巴提出的多任务学习框架,通过联合建模点击率(CTR)和点击转化率(CVR)解决传统CVR模型样本稀疏问题。其核心思想是将 CVR 定义为 CTR 与 CTCVR 的条件概率,模型包含两个子任务。

Jin_Kwok的博客 1265

AIDL:远程调用服务里的方法失败,提示取得的IBinder对象NullPointerException

问题: AIDL:远程调用服务里的方法失败,提示取得的IBinder对象NullPointerException 解决办法: 不要忘记了在Service中的onBind()方法中返回IBinder对象. return new MyIBinder;

Android开发 2992

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

使用Aidl时 Aidl文件抛出空指针异常

异常信息如下 java.lang.NullPointerException: Attempt to invoke interface method 'int java.lang.CharSequence.length()' on a null object reference at android.os.Parcel.readException(Parcel.java:2011) at andr...

ToumaKazusa_的博客 3645

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

AIDL service纪事 注意事项

本人学习AIDL实现过程遇到的几个问题记录,NULLpointerException onServiceConnected没被调用。Service Intent must be explitict.SecurityException: Binder invocation to an incorrect interface

jzlhll123的专栏 577

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android中声明对象,java – Android:AIDL中的自定义对象

我有一个应用程序通过两个aidl实现与自定义服务交互.运行该服务时,我遇到以下异常:ERROR/AndroidRuntime(9435): FATAL EXCEPTION: mainERROR/AndroidRuntime(9435): java.lang.NullPointerExceptionERROR/AndroidRuntime(9435): at android.os.Parcel.re...

weixin_31034309的博客 300

android aidl 进程通信 调用错误

学了下aidl 怎么都NullPointExcption 哎 找一下发现少了   <application android:icon="@drawable/icon" android:label="@string/app_name"> <service android:name=".TestService" > <intent-filter>..

小丰程序人生 217

Android studio中导入opencv库

出现的错误:NullPointerException: Cannot invoke “java.io.File.toPath()” because “this.mySdkLocation” is null。2、如下图所示,将opencv中文件夹下的build.grade的配置与APP文件下的build.grade配置相同。解决办法:1、网上很多人都是导入sdk/java的文件夹,实际应该按照参考链接中导入sdk文件夹。

weixin_45950842的博客 2259

Binder 跨进程调用常见崩溃原因:NullPointerException 排查与解决

在 Android 开发中,Binder 是实现跨进程通信(IPC)的核心机制。通过客户端和服务端的双重校验,结合生命周期管理,可彻底解决 Binder 调用中的空指针问题。:跨进程调用时,所有对象都应视为可能为。确保自定义对象正确实现。推荐 Google 的。

2501_94072201的博客 309

aidl跨进程调用

根据官方提供的指南,开发aidl跨进程调用,主要分以下步骤: 1.创建.aidl文件-该文件(YourInterface.aidl)定义了客户端可用的方法和数据的接口。 2.在makefile文件中加入.aidl文件-(Eclipse中的ADT插件提供管理功能)Android包括名为AIDL的编译器,位于tools/文件夹。 3.实现接口-AIDL编译器从AIDL接口文件中利用Java语言创...

weixin_30312557的博客 154

Java.lang.NullPointerException

Java.lang.NullPointerException   这个异常大家肯定都经常遇到,异常的解释是”程序遇上了空指针”,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。

broccoli2的博客 589

Android中SharedPreferences出现NullPointerException的解决办法

这几天写Service组件的时候,莫名其妙老出现NullPointerException异常,主要经过是这样的:在Activity中创建Preferences文件,然后在Service中使用这个文件,出错的源代码如下: 1 import android.app.Service; 2  import android.content.Intent; 3  import android.cont...

weixin_33725515的博客 342

Android Parcel.createException异常分析

不要只看Parcel.createException,这个不是关键原因,肯定是跨进程调用方法里失败了。

男儿不展风云志,空有天生八尺躯 2053

Android AIDL跨进程通信实战:从原理到猜拳游戏服务实现

在Android应用开发中,跨进程通信(IPC)是实现模块化、多应用协同的核心技术。其底层原理基于Binder机制,通过代理-存根模式在隔离的进程间传递数据和方法调用。这项技术的核心价值在于允许不同应用或组件安全、高效地共享功能与数据,是构建复杂、高性能Android系统的基石。典型的应用场景包括后台服务与前台界面交互、多应用协同工作以及核心功能模块化。AIDL作为Android官方推荐的IPC解决方案,通过定义强类型接口,让开发者能够以近乎本地调用的方式实现跨进程通信,尤其适合需要同步调用和传递自定义对象

weixin_34021089的博客 488

Android AIDL跨进程通信实战:从原理到避坑指南

跨进程通信(IPC)是Android系统架构中的核心技术,它允许不同应用或进程间安全高效地交换数据与调用服务。其底层基于Binder机制实现,通过序列化与反序列化完成进程间数据传递。这项技术对于构建模块化、高性能的Android应用至关重要,广泛应用于后台服务、多进程架构及系统级功能集成等场景。AIDL作为Android官方提供的IPC解决方案,通过接口定义语言简化了跨进程通信的复杂度。本文聚焦AIDL实战,深入解析参数方向控制与回调机制等核心概念,并提供从环境配置到性能优化的完整避坑指南,帮助开发者掌握这

weixin_33906657的博客 536
上一篇: git 基本操作
下一篇: Android音量系统分析
阿杰、
博客等级 码龄11年 13粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值