sigck(2.Binder机制和远程服务调用机制)
来源:互联网 发布:音乐间谍类似软件 编辑:程序博客网 时间:2024/05/16 06:40
1.前景摘要
最近要实现Android中免注册Activity就可以运行的问题,那么结果是搞定了,就是可以不用在AndroidManifest.xml中声明这个Activity即可运行,主要是通过骗取系统,偷龙转凤技术的,这个知识点后面会详细讲解的,因为在研究了这个问题过程中遇到了很多知识点,当然最重要也是最根本的就是Android中的Binder机制和远程服务调用机制,而关于Binder机制的话,在Android中算是一个非常大的系统架构模块了,光这篇文章是肯定不能讲解到全部的,而且本人也不是非常的熟悉Binder机制,只是发表个人的理解,并且会用最简单的语言讲解最核心的知识,因为现在有很多知识都在介绍Binder机制,但是大部分说的都太抽象了大部分都看不懂。
二、具体需求
接下来几篇主要是介绍关于Android中的应用启动流程,通过Hook机制拦截Activity的启动流程,达到我们想要的功能,同时可以实现Activity无需在AndroidManifest.xml中声明即可运行的效果。
三、Android中远程服务调用分析
我们如果做过多进程之间通信的话都了解远程服务的使用了,使用也是非常简单的,下面来看一下如何定义自己的远程服务:
1、定义一个AIDL文件
类似于定义接口类型,这个AIDL文件将在本地和远端都要使用到:
Demo.aidl
package cn.wjdiankong.hookdemo;interface Demo{ int sendData(String data); String getData();}
2、定义远端服务
在远程服务中的onBind方法,实现AIDL接口的具体方法,并且返回Binder对象:
//远程服务public class DemoService extends Service{ @Override public IBinder onBind(Intent intent){ //返回远端的Binder对象,并且实现类 return new Demo.Stub(){ @Override public int sendData(String data) throws RemoteException{ return 0; } public String getData() throws RemoteException{ return ""; } }; }}
3、本地创建连接对象
本地创建一个服务连接对象,实现ServiceConnection接口,在连接成功后,会得到一个远端传递过来的Binder对象,就是上面的远端服务onBind方法返回的,得到Binder对象之后在进行转化就可以得到AIDL对象,然后即可调用方法:
//连接远端服务的回调public class DemoConnection implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name,IBinder service){ //连接成功后,会传递远端的Binder对象,然后再转化成本地接口对象即可调用方法 Demo demo=Demo.Stub.asInterface(service); try{ demo.sendData(""); demo.getData(); }catch (RemoteException e){ e.printStackTrace(); } } @override public void onServiceDisconnected(ComponentName){ //断开连接 }}
4、连接服务
连接服务也是比较简单的,这时候把上面的连接对象传递进去即可
Intent intent=new Intent(this,DemoService.class);bindService(intent,new DemoConnection(),Context.BIND_AUTO_CREATE);
到这里我们就看到完成了本地端和远端的通信了,如果把DemoService远端服务定义在另外一个进程中,那么这里就可以实现多进程通信了。看到上面的步骤很简单,但是有一个核心的地方就是Demo.Stub类,这个类起着重要的作用,下面来分析一下他的实现,每次定义了AIDL接口文件之后,编译一下就会在gen目录中产生对应的java文件了:
- sigck(2.Binder机制和远程服务调用机制)
- Android系统篇之----Binder机制和远程服务调用
- Android系统篇之----Binder机制和远程服务调用机制分析
- Android系统篇之----Binder机制和远程服务调用机制分析
- Android系统篇之----Binder机制和远程服务调用机制分析
- Android系统篇之----Binder机制和远程服务调用机制分析
- Android系统篇之----Binder机制和远程服务调用机制分析
- Android系统篇之—-Binder机制和远程服务调用机制分析
- Android系统篇之----Binder机制和远程服务调用机制分析
- Android系统篇之—-Binder机制和远程服务调用机制分析
- Android系统篇之—-Binder机制和远程服务调用机制分析
- Android Binder机制的Native应用&&Android系统RPC与Binder && Android Service学习之AIDL, Parcelable和远程服务
- Android TV 添加系统服务,通过Binder机制从APK对其进行跨进程远程调用
- android binder机制之——(创建binder服务)
- android binder机制之--(创建binder服务)
- android binder机制之——(创建binder服务)
- Android binder机制之 5 --(创建binder服务)
- Binder机制和AIDL
- 计算字符个数
- SecureCRT 绝佳配色方案, 保护你的眼睛 关键词:SecureCRT配色, SecureCRT设置颜色, Linux终端配色,Linux终端颜色设置. 终端有一个好的配色,不仅能保护自
- 零基础学习GitHub桌面版-3 团队协作流程
- ZZmsvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
- NOPI实现导入导出泛型List,支持自定义列
- sigck(2.Binder机制和远程服务调用机制)
- windows核心编程之进程(2)
- 对象的序列化与反序列化
- linux面试题
- A
- Thressjs开发笔记之八创建、加载高级网格和几何体
- hdu 2255
- springmvc中常见的非注解开发的处理器映射器
- 004-java.util.logging.Logger使用