Android Service学习之AIDL实例

2024-06-06 03:48

本文主要是介绍Android Service学习之AIDL实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【每日话题】国庆放假期间的苦逼事,欢乐事!
http://www.eoeandroid.com/thread-204909-1-1.html

随手记源码啊!!忘记哪里的啦,给大家分享一下
http://www.eoeandroid.com/thread-203718-1-1.html

一个触摸界面会产生小气泡的例子
http://www.eoeandroid.com/thread-203665-1-1.html

由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。

以下讲对如何实现AIDL调用进行讲解,本文包括AIDL接口调用,回调,以及传递复杂数据类型

Demo运行效果图

Aidl文件

Person.aidl
package com.archermind.aidl;
parcelable Person;
ITaskBinder.aidl
package com.archermind.aidl;
import com.archermind.aidl.ITaskCallBack;
import com.archermind.aidl.Person;
interface ITaskBinder {
void fuc01();
void fuc02();
String fuc03(in Person person);
void registerCallBack(ITaskCallBack cb);
void unregisterCallBack();
}
ITaskCallBack.aidl
package com.archermind.aidl;
interface ITaskCallBack {
void onActionBack(String str);
}

 

先看Myservice的代码
服务端实现了AIDL的相关接口,供客户端调用

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;
}
private final ITaskBinder.Stub mBinder=new ITaskBinder.Stub() {
@Override
public void unregisterCallBack() throws RemoteException {
// TODO Auto-generated method stub
Log.v(TAG,"unregisterCallBack...");
mTaskCallBack=null;
}
@Override
public void registerCallBack(ITaskCallBack cb) throws RemoteException {
// TODO Auto-generated method stub
Log.v(TAG,"registerCallBack...");
mTaskCallBack=cb;
}
@Override
public void fuc01() throws RemoteException {
// TODO Auto-generated method stub
Log.v(TAG,"fuc01...");
}
@Override
public void fuc02() throws RemoteException {
// TODO Auto-generated method stub
Log.v(TAG,"fuc02...");
mTaskCallBack.onActionBack("hello world");
}
@Override
public String fuc03(Person person) throws RemoteException {
// TODO Auto-generated method stub
String name=person.getName();
String descrip=person.getDescrip();
int sex=person.getSex();
String ret="";
if(sex==0){
ret="Hello "+name+",you are handsome"+"("+descrip+")";
}else{
ret="Hello "+name+",you are beautiful"+"("+descrip+")";
}
return ret;
}
};


客户端实现回调接口

private final ITaskCallBack.Stub mCallBack=new ITaskCallBack.Stub() {
@Override
public void onActionBack(String str) throws RemoteException {
// TODO Auto-generated method stub
Log.v(TAG,"onActionBack str="+str);
}
};

 

客户端如何与服务器绑定并建立连接

Intent intent=new Intent("com.archermind.aidl.myservice");
bindService(intent,mConnection,BIND_AUTO_CREATE);
private ServiceConnection mConnection=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
mService=ITaskBinder.Stub.asInterface(service);
try {
mService.registerCallBack(mCallBack);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v(TAG,"onServiceConnected");
}

 

详细信息请见附件中的源码工程,希望对大家有用.

这篇关于Android Service学习之AIDL实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035005

相关文章

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

PyQt6 键盘事件处理的实现及实例代码

《PyQt6键盘事件处理的实现及实例代码》本文主要介绍了PyQt6键盘事件处理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录一、键盘事件处理详解1、核心事件处理器2、事件对象 QKeyEvent3、修饰键处理(1)、修饰键类

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.