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平台将这些跨进程访问的对象分解成 ...
随机推荐
- RSA加密解密及RSA签名和验证
原文:RSA加密解密及RSA签名和验证 1.RSA加密解密: (1)获取密钥,这里是产生密钥,实际应用中可以从各种存储介质上读取密钥 (2)加密 (3)解密2.RSA签名和验证 (1)获取密钥,这里是 ...
- 零元学Expression Blend 4 - Chapter 33 简单轻松的学会如何使用Visual States(下)
原文:零元学Expression Blend 4 - Chapter 33 简单轻松的学会如何使用Visual States(下) 上篇提到了Visual State Manager中文翻译为视觉状态 ...
- ORACLE 错误 ora-01830 解决方法
http://www.cnblogs.com/BetterWF/archive/2012/06/20/2556442.html 错误产生原因:date类型不能包含秒以后的精度. 如日期:2012-06 ...
- 【UWP开发】uwp应用安装失败
原文:[UWP开发]uwp应用安装失败 编译出了uwp应用.appx之后双击打开,报错你需要为此应用包而安装的新证书,或者是带有受信任证书的新应用包.系统管理员或应用开发人员可以提供帮助.证书链在不受 ...
- Delphi 10.2的 更新说明,所有官方资料:新特征和Bugfix列表,所有工具开发说明
TMS东京版控件更新情况http://www.tmssoftware.com/site/radstudio10_2tokyo.asp RAD Studio 10.2 更新说明http://blog.q ...
- Linux可以把vmdk当做磁盘加载进去
VMware虚拟机由于停电,无法启动MAC系统 下午的时候,正在开发ios app,结果停电了.当时还不知道,伴随而来的灾难竟然折腾了好几天,真是心力交瘁. 我是在VMware虚拟机下装的Mac os ...
- Python 2, Python 3, Stretch & Buster
Python 2.7的终止支持时间为2020年,现在已经是2015年了,然而Debian中仍然有大量软件包是基于Python 2的实现.Debian的维护者开始认真讨论淘汰Python 2.开发者Pa ...
- 在mac上尝试docker-swarm
声明:本博客欢迎转发,但请保留原作者信息!新浪微博:@Lingxian_kong;博客地址:孔令贤的博客;内容系本人学习.研究和总结,如有雷同,实属荣幸! 安装docker-machine 我的安装环 ...
- 海康威视频监控设备Web查看系统(二):服务器篇
声明:本系列文章只提供交流与学习使用.文章中所有涉及到海康威视设备的SDK均可在海康威视官方网站下载得到.文章中所有除官方SDK意外的代码均可随意使用,任何涉及到海康威视公司利益的非正常使用由使用者自 ...
- springmvc拦截请求
springmvc.xml <!--拦截请求 --> <mvc:interceptors> <mvc:interceptor> <!-- 要拦截的请求类型 / ...