day34_安卓基础之内容提供者
-
服务的简单回顾
====4 大组件====
Acitivity, broadcastReceiver , Service , ContentProvider
回顾service:
启动服务
可以在后台一直运行
绑定服务
可以调用服务中的方法
混合开启服务:
开启服务
绑定服务
调用服务中的方法
解绑服务
关闭服务
-
调用远程服务&android中ipc机制(aidl引入)
-
调用远程服务
-
调用远程服务的步骤小结
-
第一步:
在远程service 中去编写一个 内线类 , 让这个内线类 集成Binder,实现IService接口 , 把IService 接口声明出来
MyAgent extends Binder impelements IService
-
第二步:
将IServic接口中的 public , private 给干掉, 并且将 扩展名 改为 .aidl
-
第三步:
回到 service中的内线 类, 将其 改为 继承 IService.Stub类
-
第四步:
在这个 内线类中实现的 方法中 去 调用服务中的方法
-
第五步:
回到 远程的调用者 应用中, bindService , 写法 与之前一样
-
第六步:
编写 绑定服务的时候, 建立的 通信 频道
MyConnection
-
第七步:
在MyConnection的方法onServiceConnected中 强制类型转换service 为内线
-
第八步
通过内线调用 服务中 方法
-
aidl的原理&面试题
Aidl是 谷歌工程封装好的, 对app 层 暴露的 用于实现 IPC 通信 的一套技术.
Aidl 在编写的时候, 如果 要 有返回值, 并且 接受 参数 , 都是 可以 的
package com.itheima.remoteservice;
interface IService {
String callMethodInService(String name, int money);
}
package com.itheima.remoteservice;
interface IService {
Person callMethodInService(String name, int money);
}
如果在使用 aidl 技术的 时候, 传递的数据是 基本数据类型, 那么可以 直接写 .
但是如果不是 基本数据类型, 那么 这种类型的数据 必须要 去实现 一个Parceable的接口
面试题:
请问 android 中如何实现 ipc 通信 ?
-
常规的情况下, A 应用去**B 应用中的组件的时候, 这实际上就是一种IPC通信的体现, 这个时候发送是Intent 就是
在做ipc通信 , intent 也是去实现 paraceable 接口的, ipc 通信时 传递的非8 种基本数据类型都需要去实现 这个接口
2. 进程 间 通信, 除了 使用 intent 之外, 还可以 使用 远程服务 调用
3. 谷歌已经对应用中提供了 aidl的技术 供 应用之间进行通信
-
支付宝远程服务调用
-
alipay支付内部代码靓照预览
-
引出contentProvider
-
后门程序提供的暗号
-
回顾早上最后的contenProvider的使用原理
-
提出需求-contentProvider的使用
内容提供者: 说白了就是用来提供 数据的
早期 android 刚刚出现的时候, 谷歌 的水货工程师设计了这样的api ,但是 发现 不好 , 又 推出了 contentProvider, service, BroadcastReceiver这样的技术
-
-
如何去创建数据库?
继承 SqliteOpenHelper
什么地方会用到contentProvider
你工作后 会很少 自己 书写 后门程序(ContentProvider)
你开发的应用需要去访问 系统 现有的一些应用程序中的数据(这种应用程序也必须是 非常常用的著名的应用程序)
-
添加和删除系统短信的代码
-
发送通知到系统的界面中
****************这种低版本运行不了
-
发送通知到系统的界面(PendingIntent)
-
装B神器
写短信不是发送短信的权限
22222222222222222222222
333333333333333333333333333333333
-
闲聊android的源码
说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
-
电话录音的代码实现