我的第一个AIDL程序

AIDL解析(一):AIDL原理解析 AIDL编写 AIDL运行原理 AIDL 阅读详情

今天阅读Android源码,看到文件SystemUIService.java (frameworks\base\packages\systemui\src\com\android\systemui)

    @Override
    public void onCreate() {
        // Pick status bar or system bar.
        IWindowManager wm = IWindowManager.Stub.asInterface(
                ServiceManager.getService(Context.WINDOW_SERVICE));
        try {
            SERVICES[0] = wm.canStatusBarHide()
                    ? R.string.config_statusBarComponent
                    : R.string.config_systemBarComponent;
        } catch (RemoteException e) {
            Slog.w(TAG, "Failing checking whether status bar can hide", e);
        }

为了更好的理解代码,于是自己也想写一个AIDL的程序。

[1]建立一个工程Leader01_aidl


IMyservice.aidl
package blog.topicmmi.test;
interface IMyService{
   String getValue();
}

MyService.java

package blog.topicmmi.test;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;


public class MyService extends Service
{


  public class MyServiceImpl extends IMyService.Stub
  {
@Override
public String getValue() throws RemoteException
{
return  "我的第一个AIDL程序";
}  
  }
  
  @Override
  public IBinder onBind(Intent intent)
  {
 return new MyServiceImpl();
  }
}

AndroidManifest.xml
        <service android:name=".MyService">
            <intent-filter>
                <action android:name="blog.topicmmi.test.IMyService"/>
            </intent-filter>
        </service>


[2]再建立一个客户端的工程Leader_aidlclient

将Leader01_aidl\gen\blog拷到leader_aidlclient\src



Main.java
package net.blogjava.mobile;
import blog.topicmmi.test.IMyService;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class Main extends Activity implements OnClickListener
{
private IMyService myService = null;
private Button btnInvokeAIDLService;
private Button btnBindAIDLService; 
private TextView textView;
private ServiceConnection serviceConnection = new ServiceConnection()
{

// 当与service的连接建立后被调用
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
myService = IMyService.Stub.asInterface(service);
btnInvokeAIDLService.setEnabled(true);


}


@Override
public void onServiceDisconnected(ComponentName name)
{
// TODO Auto-generated method stub


}
};


@Override
public void onClick(View view)
{
switch (view.getId())
{
case R.id.btnBindAIDLService:
//bindService()绑定到一个service.Android系统调用service的onBind()方法,它返回一个用来与service交互的IBinder.
//bindService()会立即返回,它不会返回IBinder给客户端.要接收IBinder,客户端必须创建一个ServiceConnection的实例并传给bindService().
//ServiceConnection包含一个回调方法,系统调用这个方法来传递要返回的IBinder.
bindService(new Intent("blog.topicmmi.test.IMyService"),
serviceConnection, Context.BIND_AUTO_CREATE);
break;


case R.id.btnInvokeAIDLService:
try
{
textView.setText(myService.getValue());
}
catch (Exception e)
{


}
break;
}




}


@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);
btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService);
btnInvokeAIDLService.setEnabled(false);
textView = (TextView) findViewById(R.id.textview);
btnInvokeAIDLService.setOnClickListener(this);
btnBindAIDLService.setOnClickListener(this);
}
}


[3]运行后


点“绑定AIDL服务”按钮后”调用AIDL服务"会反显.再点”调用AIDL服务"按钮:

心得:无论多容易的事情,都要在代码上实践一下,这样容易记住!

完整源码地址:http://download.youkuaiyun.com/detail/topicdev/5247556

点击打开链接

适用于 HAL 的 AIDL Android 11 引入了在 Android 中使用 AIDL 实现 HAL 的功能。这样就可以在不使用 HIDL 的情况下实现 Android 的部分代码。我们强烈建议尽量将 HAL 转换为只使用 AIDL(如果上游 HAL 使用 HIDL,则必须使用 HIDL)。 如果 HAL 使用 AIDL 在框架组件(例如system.img中的组件)和硬件组件(例如vendor.img中的组件)之间进行通信,则必须使用稳定的 AIDL。不过,如需在分区内进行通信(例如从一个 HAL 到另一个),则对所... 阅读详情

相关推荐

android aidl 框架,适用于 HAL 的 AIDL

Android 11 引入了在 Android 中使用 AIDL 实现 HAL 的功能。这样就可以在不使用 HIDL 的情况下实现 Android 的部分代码。我们强烈建议尽量将 HAL 转换为只使用 AIDL(如果上游 HAL 使用 HIDL,则必须使用 HIDL)。如果 HAL 使用 AIDL 在框架组件(例如 system.img 中的组件)和硬件组件(例如 vendor.img 中的组件)...

weixin_26801149的博客 3561

农民工看完都会了!我的头条面试经历分享,不吃透都对不起自己

开头 Android开发,假如开始没有任何的开发经验的话, 千万不要着急,不要想着在短时间内就把一个语言学习好, 因为你之前没有任何的学习经验, 在这个过程中需要有耐心地学习完JAVA的基础知识, 然后才开始踏上Android开发之旅。 若之前做过JAVA开发经验的,这类同学可以在Android上迅速上手,但是同样的是不可忽略Android的一些基础知识,只有把基础掌握好了,才能在后期取得大的进步。 Android 相关 1. Android 之 SharedPreferences 内部原理浅析 2. An

m0_56037919的博客 426

Android IPC 之 AIDL 使用

生成的接口包括一个名为 Stub 的子类,它是其父接口(例如,IUserInterface.Stub)的抽象实现,并声明了 .aidl 文件中的所有方法。:将服务端的 Binder对象生成客户端所需的AIDL接口类型对象,这种转换过程是区分进程的,如果位于同一进程,返回的就是Stub 对象本身,否则返回的是系统封装后的Stub.proxy对象。,服务端将会收到客户端对象,该对象不为空,但是它里面的字段为空,但是在服务端对该对象作任何修改之后客户端的传参对象都会同步改动。创建一个实例并进行序列化。

2401_87555477的博客 1037

实现uniapp开发安卓应用使用AIDL与原生安卓通信

最近公司有开发原生插件,让uniapp与原生安卓使用AIDL通信的需求,奈何本人是原生开发,没有接触过uniapp啊,遂学,从官方文档到百度各种搜索,大约三天时间终于调通,属予作文以记之~技术前提 要有一定的原生安卓及AIDL开发经验,不至于你会看懵逼。在开发中遇到任何问题,请仔细对照上面链接步骤进行操作,官方文档还没有他的清晰。

WriteBug001的博客 1548

使用AIDL通过进程APK之间通信

通过使用AIDL进程间通信方式,由A.apk 传递参数到B.apk中。实现两个apk之间的数据交互。

Android - 蓝牙开发

文章目录科普SIG类型制式编程Classic BluetoothBluetooth Low Energy蓝牙的UUID是什么?有什么用? 科普 https://zh.wikipedia.org/wiki/%E8%97%8D%E7%89%99 蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由 2.4 至 2.485 GHz 的 ISM(工业、科学、医疗)频段来进行通信。1994 年由电信商

qq_43323826的博客 1万+

uni-app 跳转Android原生界面(Activity)并传值

uni-app 跳转Android原生界面(Activity)并传值

sky5547的博客 2399

【数字IC/FPGA】低功耗设计

低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结 功耗的类型 CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充

qq_40268672的博客 3072

uniapp api整理

1.获取屏幕信息:wx.getSystemInfo 屏幕高度,信号栏高度,窗口高度(右上角胶囊以下高度) wx.getSystemInfo({success(res){}}; 2.wx.getMenuButtonBoundingClientRect()可以获取到右上角胶囊的布局位置信息 这里的top和bottom是胶囊到屏幕上边沿的距离,需要用wx.getSystemInfo获取信号栏高度,差值相当于标题栏的padding,标题栏高度=(top-信号栏高度)*2+胶囊高度 ...

weixin_44022586的博客 382

【OpenClaw从入门到精通】第09篇:企业级实践——将OpenClaw接入钉钉,打造7×24小时数字员工(2026实测版)

本文聚焦OpenClaw的企业级落地实践,以“招聘数字专员”为核心场景,完整演示从钉钉接入到全流程自动化的实现路径。内容涵盖企业级部署架构设计、前置环境搭建、核心技能开发、流程串联、安全权限管控及运维监控六大模块,详解简历解析、岗位匹配、外呼集成、CRM同步、日历提醒等关键技能的构建逻辑与代码实现。借鉴中关村科金、网易智企的企业级实践经验,重点突破企业知识融合、安全权限管控、业务系统连接三大核心门槛,提供可直接参考的配置示例与操作步骤。所有技术方案均基于公开文档与实测验证,兼顾新手入门与进阶实操。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1178

【人脸识别】基于 Gabor+SVM和PCA+SVM实现人脸识别matlab源码含 GUI

1 简介 随着经济的快速发展,互联网的普及,信息安全逐渐被人们所重视。人脸识别技术作为保护信息安全的重要手段之一,也逐渐被研究学者所重视。人脸识别作为计算机视觉技术和生物特征识别技术的一个重要分支,模式识别与人工智能的一个重要领域,其主要任务是对静态图像或动态视频进行识别。如何快速的正确的对人脸进行识别是目前人脸识别课题的一个难题。人脸识别算法的选取直接关系到人脸识别的识别率。 本文首先介绍了国内外人脸识别的发展现状,并对人脸图像预处理方法进行了详细阐述。图像预处理的方法有很多,主要包括:灰度变换、图像锐

qq_59747472的博客 1137

Android进阶——AIDL详解

1. 简介 AIDL(Android 接口定义语言),可以使用它定义客户端与服务端进程间通信(IPC)的编程接口,在 Android 中,进程之间无法共享内存(用户空间),不同进程之间的通信一般使用 AIDL 来处理。 使用流程: 在 .aidl 文件中定义 AIDL 接口,并将其添加到应用工程的 src 目录下,创建完成之后 rebuil Android SDK 工具会自动生成基于该 .aidl 文件的 IBinder 接口,具体的业务对象实现这个接口,这个具体的业务对象也是 IBinder 对象,当绑

Yawn 2万+

嵌入式模拟电路面试题大全及参考答案(持续更新)

高输入阻抗:由于晶体管的基极-发射极(BJT)或栅极-源极(MOSFET)电压很低,跨导放大器具有很高的输入阻抗。低输出阻抗:晶体管的集电极-发射极或漏极-源极电阻较低,提供较低的输出阻抗。电压控制:输入信号控制晶体管的跨导,从而控制输出电流。晶体管:作为放大器的核心,可以是BJT或MOSFET。偏置电路:为晶体管提供稳定的工作点,确保其在放大区域内工作。负载电阻:与晶体管的集电极或漏极连接,将电流转换为电压。晶体管的选择:根据所需的增益、速度和功率消耗选择合适的晶体管。偏置稳定性。

大模型大数据攻城狮的专栏 989

HelloAIDL-第一个用AIDL实现的binder调用

HelloAIDL-第一个用AIDL实现的binder调用实现步骤创建AIDL文件编译生成binder接口函数创建service服务端创建客户端调用 实现步骤 创建AIDL文件 使用AndroidStudio工具,右键app,按照下图示例创建一个AIDL文件 我们先在AIDL文件中写一个最简单的函数,例如: interface IMyAidlInterface { void bindSu...

JACKAYCN的博客 273

【产品经理修炼之道】- 优惠券系统从入门到精通(一)

为了满足企业的优惠券业务,优惠券系统一般需要包含哪些功能?这篇文章里,作者从架构、功能等维度做了拆解,一起来看看吧。此部分主要讲解为满足公司优惠券业务,需要优惠券系统必须包含哪些功能,即优惠券架构图。

xiaoli8748的专栏 1810

强化学习在视觉导航中的应用

强化学习在视觉导航中的应用​ ,人工智能,计算机视觉,大模型,AI,强化学习(Reinforcement Learning, RL)是一种通过智能体(Agent)与环境进行交互,以最大化累积奖励为目标的机器学习范式。它不依赖于预定义的规则或大量标注数据,而是让智能体在试错过程中学习最优策略。计算机视觉(Computer Vision)则赋予智能体 “观察” 环境的能力,使其能够从图像或视频中提取有用信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

AIDL

在Android中,不允许一个进程访问另外一个进程的内存,因此android定义了AIDL(Android Interface Definition Language)接口语言实现进程间通信IPC. 不是任何时候IPC都需要通过AIDL,只有当有必要允许不同应用程序的客户端访问你的服务并且想在你的服务中处理多线程时才有必要使用AIDL。 如果你不需要在不同应用程序之间处理并发的IPC,则你可以

1万+

从0到1打造一台机器人走起来

1)本体机械结构设计,依据人体生物学和生物力学知识,结合机器人运动时各关节扭矩需求,进行合理选用电机,比如胯部需要大扭矩,腿部惯量小等2)硬件拓扑上,分层架构的信号层和功率协同工作,高带宽,低延时,硬实时3)步态规划设计与验证环节实机回溯和部署过程:Real2Sim,Sim2Sim,Sim2Real。

weixin_43163941的博客 244

android之AIDL篇

1.什么是aidl Android使用的一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。 2.AIDL基本语法 AIDL使用简单的语法来声明接口,描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型,...

baidu_32015283的博客 3637

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

AIDL详解

一、概述 AIDL意思即Android Interface Definition Language,翻过来就是Android接口定义语言,是用于定义服务端和客户端通信接口的一种描述语言,可以拿来生产IPC代码,从某种意义上说AIDL其实就是一个模板,因为在使用过程中,实际起作用的并不是AIDL文件,而是据此生产的一个Interface的实例代码,AIDL其实是为了避免我们重复写代码而出现的一个模...

awodefengduanwu的博客 9578

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

AIDL笔记

编写 .aidl 文件替换 .hal文件(Stable AIDL 具有向后兼容性需要使用libbinder_ndk, 而libbinder_ndk的backend是core libbinder, 使用"/dev/binder"进行通信。

Dylan_Sen的博客 1475

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android Service AIDL

Service AIDL简述 Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。Android应用程序组 件中的4个(Activity、Broadcast、 Service和Content Provider)都可以进行跨进程访问,Service就是通过AIDL服务来 完成不同进程之间的通信。 在AIDL服务中有两种对象:   服

Code-lover's Learning Notes 1340

AIDL详解,尝试自己动手实现 AIDL 机制

AIDL(Android Interface definition language,安卓接口定义语言)是Android中IPC(Inter-process Communication)方式的一种,简单来说,AIDL的作用就是你可以在自己的APP绑定另一个APP的service,这样两个APP就可以进行交互。

Guang_Mang 的博客 2415

AIDL进程间传递复杂数据类型—AIDL传递其他AIDL接口

AIDL进程间传递复杂数据类型系列: AIDL进程间传递复杂数据类型—AIDL传递其他AIDL接口AIDL进程间传递复杂数据类型—AIDL传递android.os.Parcelable接口=========================================首先我们来写一个简单的服务: AIDL文件:interface IManager { int add(int x , i

欢迎关注微信公众号:DroidMind 5197

安卓AIDL的使用

IPC通信机制方式之一AIDL通信

shengjiaxin的博客 2462
上一篇: Activity的生命周期
下一篇: 关机充电时充电的坐标
TopicDev
博客等级 码龄14年 128粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值