android_aidl
好久未更新博客了。人都是这样,刚开始对某一样东东冲劲十足,时间一长,很难坚持下去了,我这博客也是。所以我要打破成规,继续更新。
本次博客谈谈adil的用法。aidl的全称叫什么来着忘了,不过不要紧,重点不是叫啥名,而是要领会这玩意儿是做啥的。扯远一点,我是越来越觉得,会具体的什么编程语言,会具体的什么api啥的,都是虚的,这些东西说白了,只是我们通向目标的一个工具。实现目标可以有很多工具实现,所以使用什么工具不重要,重要的是实现的方法、组织工具的思路、以及顺藤摸瓜快速解决问题的能力才是上乘的本事。
aidl是用于跨进程通信。可以看到,如果要达到跨进程通信,方法有多种,aidl只是其中的一种。
现在网上能搜到的关于aidl很多都是activity与service之间的通信,我记得官网上也是以这个为例,看来aidl应该适用于这种案例。再吐槽下,现在国内原创实在是太匮乏了。有一次我就在百度上搜一个技术点,搜了差不多前十多页,基本上只有一个原创,其余的都是复制。正所谓哀其不幸,怒其不争,整体ian吵嚷着国内it比上不上国外,那为啥不去多想几个为什么做一些原创?有时候我真的是恨恨的咬咬牙去谷歌了,还英文搜索,老外是相当多的原创。
1. 先定义aidl的接口,这个事什么时候都需要的。
package com.cn.sxp.aidl;
interface IAidlService {
String sayHello();
}
这个接口简单的一逼 啊,接下来就是搞一个服务了:
2. 服务代码:
package com.cn.sxp.aidl; import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException; public class aidlServiceImp extends Service {
@Override
public IBinder onBind(Intent intent) {
return mBinder;
} private IAidlService.Stub mBinder = new IAidlService.Stub() {
public String sayHello() throws RemoteException {
return "hello world";
}
};
}
在服务中实现了这个接口,只是简单的返回一个字符串而已。
3. 再搞一个活动,链接这个服务,调用这个方法:
package com.cn.wx.client; import com.cn.sxp.aidl.IAidlService; import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException; public class AidlClientActivity extends Activity {
IAidlService mService = null; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); beginBindService();
} private void beginBindService(){
Intent service = new Intent("com.cn.sxp.aidl.IAidlService");
bindService(service, mConnection, BIND_AUTO_CREATE);
} private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
} @Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
/**
* IAidlService.Stub类取一个实例对象
*/
mService = IAidlService.Stub.asInterface(service);
try {
mService.sayHello();
} catch (RemoteException re) {
re.printStackTrace();
}
}
};
}
完了,原创就这么简单,何必整天抄你抄他的。
android_aidl的更多相关文章
- Android 中 Service AIDL使用
1.创建两个项目创建两个.aidl文件 2.在传递值的类里面创建Service并且返回接口: 服务返回值onBind public IBinder onBind(Intent intent) ...
- android基础---->AIDL服务的使用
AIDL和其他的IDL类似,它允许你定义程序接口,以便客户端与服务器端通过IPC机制交互.在android上面,一个进程一般不能访问另外进程的内存.因此,Android平台将这些跨进程访问的对象分解成 ...
随机推荐
- 从零开始学习音视频编程技术(三) 开发环境搭建(Qt4.86手动设置环境,主要就是设置g++和qmake,比较透彻,附下载链接)
1.先下载安装Qt 我们使用的版本是4.8. 可以自行百度下载也可以从下面的网盘地址下载: Qt库和编译器下载: 链接:http://pan.baidu.com/s/1hrUxLIG 密码:0181 ...
- WPF Aero Glass Window
原文:WPF Aero Glass Window 用法 Win7 DwmSetWindowAttribute function Win10 SetWindowCompositionAttribute ...
- asp.net core2.0中网站发布的时候,视图文件不被打包成dll
项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...
- LLVM和GCC的区别(LLVM提供了模块化的编译模块,非常有利于重用,以前的编译器都没有做到这一点)
最近在Mac OS X Mountain Lion下用Xcode进行开发,发现在编译选项里有如下所示的这两种编译器:一个是Apple LLVM compiler 4.2,另外一个是LLVM GCC 4 ...
- Qt浅谈之二十七进程间通信之QtDBus good
一.简介 DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,DBus使得Linux变得更加智能,更加具有交互性. DB ...
- SYN012型B码时统
SYN012型B码时统 产品概述 SYN012型B码时统是由西安同步电子科技有限公司精心设计.自行研发生产的一款通用性时统终端,内置高精度恒温晶振,接收GPS北斗双模卫星信号,10MHz外部参考 ...
- 使用豆瓣的pip源安装python模块
1.指定豆瓣pip源安装Django pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com ...
- Redis 学习笔记(篇二):字典
字典 字典又称为符号表.关联数组或映射(map),是一种用于保存键值对(key-value)的数据结构. 那么 C 语言中有没有这样 key-value 型的内置数据结构呢? 答案:没有. 说起键值对 ...
- Spring Boot的学习之路(02):和你一起阅读Spring Boot官网
官网是我们学习的第一手资料,我们不能忽视它.却往往因为是英文版的,我们选择了逃避它,打开了又关闭. 我们平常开发学习中,很少去官网上看.也许学完以后,我们连官网长什么样子,都不是很清楚.所以,我们在开 ...
- 上不了名校?可以在 GitHub 上读他们的课程
今天开始,全国各大区域的高考成绩陆续公布,又到了几家欢喜几家愁的时刻,如果你准备报考计算机相关专业,但是又由于分数不高而苦恼.别担心,在 GitHub 上有着大量的名校教学资源,即使上不了名校,也可以 ...