Android Service 回顾
来源:互联网 发布:淘宝加盟的骗局揭秘 编辑:程序博客网 时间:2024/05/01 03:19
Android IntentService完全解析 当Service遇到Handler
Android aidl Binder框架浅析
Android 基于Message的进程间通信 Messenger完全解析
android跨进程通信(IPC):使用AIDL
对于 Service 部分的概念已经有些模糊了,趁假期又回顾了一下。之前翻译过官方文档,现在官网已经有中文了,方便了许多。过了一下相关的几个类源码,加深下印象,过程就不写了,几位大神都已经写的非常详细了。
1. IntentServce
基于 HandlerThread 的 IntentService ,主要就是解决了 Service 需要自己创建线程的问题的,对于简单的任务来说这是个不错的选择。
2. Stub & Proxy
AIDL 只定义一个接口再格式化之后看还是非常清晰的,没有原来想象的那么复杂。同进程直接返回 Server 端直接调用方法,远程的话就返回 Proxy,内部封装了对 Server 的调用。数据传输基本上就是类似 Socket 的模式,客户端先写后读,服务端写读后写。
Stub.onTranscact
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { switch (code) { case INTERFACE_TRANSACTION: { reply.writeString(DESCRIPTOR); return true; } case TRANSACTION_add: { data.enforceInterface(DESCRIPTOR); int _arg0; _arg0 = data.readInt(); int _arg1; _arg1 = data.readInt(); int _result = this.add(_arg0, _arg1); reply.writeNoException(); reply.writeInt(_result); return true; } } return super.onTransact(code, data, reply, flags); }
Proxy
public int add(int x, int y) throws android.os.RemoteException { android.os.Parcel _data = android.os.Parcel.obtain(); android.os.Parcel _reply = android.os.Parcel.obtain(); int _result; try { _data.writeInterfaceToken(DESCRIPTOR); _data.writeInt(x); _data.writeInt(y); mRemote.transact(Stub.TRANSACTION_add, _data, _reply, 0); _reply.readException(); _result = _reply.readInt(); } finally { _reply.recycle(); _data.recycle(); } return _result; }
3. 关于 AIDL 和 Messenger
之前一直以为 Messenger 和 AIDL 是两种不同的方式,这次把源码看了之后才知道其实是一个东西。Messenger 是直接定义 AIDL 方式的简化,都是基于 Binder 的,定义文件在IMessenger.aidl。
建议先看 AIDL 部分的原理,再看 Messenger 部分就非常清晰了。
0 0
- Android Service 回顾
- Android 回顾Service之Service基础使用
- Android之service一些基础回顾
- Service回顾
- android知识回顾---4大组件之service
- 技术回顾:Android 如何在Service获取最佳坐标以及发送短信到指定的手机
- 基础回顾--四大组件之一--Service
- Android开发笔记之Service知识的回顾和总结以及常见的启动方式和生命周期
- Android知识回顾
- Android面试回顾
- Android系统版本回顾
- android学习回顾
- Android回顾(一)
- Android热点回顾
- Android知识点回顾
- Android回顾之布局
- Android回顾之短信
- 2014回顾android
- LeetCode 277. Find the Celebrity
- lightoj1336Sigma Function(dfs打表或容斥)
- 部署django+apache wsgi
- Unity3d+moba+UGUI摇杆
- R3全盘毁坏数据
- Android Service 回顾
- Linux环境搭建中文LaTeX排版系统
- mount img
- LeetCode 011 Container With Most Water *
- C++上机报告实验一
- LeetCode 325. Maximum Size Subarray Sum Equals k
- LeetCode 012 Integer to Roman
- LeetCode 270: Closest Binary Search Tree Value
- 1.安卓结构分析