资源的使用
可被R文件索引:layout,图片资源,values:string color style dimen
不可被索引:网络,SD卡 ,数据库,assets,文件
- assets资源
assets目录中的文件格式hi任意的,不一定是xml
assets目录下的文件不会被R类索引,即不能使用Resources对象获取
assets目录下的资源不会被打包到apk中
文件存储
SQLite
- 事务的ACID特性:原子性、一致性、隔离性、持久性
ContentProvider
- uri
统一资源标识符:Uniform Resource Identify
组成:content://org.edu.provider/words
“content://” :Android中的固定部分
“org.edu.provider”:ContentProvider中的authority
words:资源部分,根据资源不同而有所不同
Service创建
- 两种创建方式:
context.startService(Intent intent)
生命周期:onCreate() 、onstartCommand()、 Service Running、onDestroy()
单例模式 ;依赖于创建服务的应用程序进程;无论启动了多少次Service,只需要调用一次stopService即可停掉service
context.bindService(Intent intent,ServiceConnection conn,int SERVICE_AUTO_CREATE)
生命周期:onCreate()、onBind()、[onRebind()]、Service Running、onDestroy()
系统会在调用bindService后实例化一个Service并绑定,然后调用onCreate()和onBind()方法
当所有的客户端都和Service解绑后,系统会销毁service
- IntentService和Service的区别
intentService自动创建独立的线程执行耗时任务
intentService中有一个维护耗时的线程任务的队列Work
intentService中有一个必须要复写的方法:onHandleIntent()
- Activity如何通过Binder实现访问Service中的数据(bindService)
- Service中的操作
提供内部类:Binder 内部提供了一些本Service里属性接口方法
通过生命周期的onBind()方法将Binder类的引用传给访问者(Activity)- Activity中的操作
定义Binder类(Service中内部类Binder的类型)的对象属性(假设为myBinder)(用于接收Service传来的Binder引用)
提供内部类:ServiceConnection,需要该类中提供的2个方法
onServiceConnected(componentname, binder){myBinder = binder}
onServiceDisconnected()
- AIDL实现跨进程访问Service资源
创建aidl文件 将接口暴露给客户端 客户端访问aidlService
1)在包含AIDL、Service的应用中:
定义Service:包含资源(属性)、内部的Binder类继承自AIDL编译生成后的类中的内部类Stub(其本质继承自Binder,且实现了AIDL中定义的接口)
重写onBind(), 返回其内部类Binder的对象
定义AIDL文件:定义一个接口,接口中提供访问Service资源的接口方法(抽象方法)
2)在需要访问Service资源的应用中
Activity 自定义ServiceConnection类(实现2个方法:
onServiceConnected(组件名称、Binder对象)、onServiceDisconnected())
定义Binder的对象属性(代理的引用=接口类型、其赋值操作在ServiceConnection方法中,赋值为:代理接口.stub.asInterface(binder对象))
绑定Service(bindService())
- 客户端访问aidlservice步骤
- 将service端的aidl接口文件复制到客户端应用中(把傲寒完整包结构)
- 创建serviceConnection对象
- 调用service.bindService()方法远程绑定service
- 在ServiceConnection对象的onServiceConnection方法中进行service对象返回值的处理
BroadCastReceiver
接收广播
- 接收广播
- 启动Activity显示相应数据
- 使用NotificationManaager通知用户
- 广播给其他应用程序
- 接收广播步骤
- 自定义一个类继承BR,复写onReceiver()
- 设置BR能接收的广播类型并注册该BroadCastReceiver(静态/动态)
- 添加相应权限
- 调用Context的sendBroadcast()或sendOrderBroadcast()启动BroadCastReceiver
- 广播接收器接收的顺序
动态注册的广播接收器优先级高于静态注册的广播接收器;优先级相同时,先注册的广播接收器优先级高
- 静态注册与动态注册的区别
- 静态:即使Activity销毁,仍可以接收到广播
动态:受Activity生命周期的影响,当Activity销毁时,广播失效- 静态注册:常驻型,即应用程序关闭后,仍会收到广播消息,程序也会被系统调用运行,一旦安装应用就注册,不可注销
动态注册:不是常驻型,可手工注册,手工注销
发送广播
- 普通广播和有序广播的区别
普通广播 | 有序广播 |
---|---|
完全异步 | 顺序接收priority属性 |
无法终止 | 可以终止 |
无法传递处理结果 | 可以传递处理结果给下一个接收者:setResultExtras() getResultExtras() |
sendBroadCast() | sendOrderBroadCast() |
常见数据格式分析
- 三种解析方式对比
- DOM:
原理:先把XML文档都读到内存中,然后用DOM API来访问树形结构并获取数据
特点:一次全部加载,对于数量较小时,它的效率较好,但对于XML文件较大时,速度较慢
直接把文档调入内存,较耗内存- SAX
原理:SAX是基于事件驱动的,基于回调函数;当使用SAX解析xml文档时,当读到文档开始或结束标签时,会回调一个事件,在读到其他节点或内容的时候也会回调特定函数
特点:SAX基于事件回调机制,不需要加载全部XML文件内容,是以边读边写解析的方法进行xml的解析,较适用于xml相对比较大的场合- PULL
原理:android的事件机制是基于回调函数的,pull方式也是基于事件驱动,与SAX方式一样。区别是pull返回值是数字
特点:适用xml文件较大的时候
网络应用
图形图像处理
- Matrix对图像的处理
- Translate:平移变换
- Rotate:旋转
- Scale:缩放
- Skew:错切
动画
- 属性动画与补间动画的区别
- 补间动画缺陷:
a. 作用对象属性只能作用在View上,不能作用于非View对象
b. 效果单一,只包含移动、缩放、旋转、淡入淡出效果
c. 没有改变view的属性,只能改变视觉效果- 属性动画特点
a. 作用对象:任意java对象
b. 实现的动画效果:可自定义各种动画效果
- ObjectAnimator中动画的播放顺序
- 只有一个ObjectAnimator对象时,直接 该对象.start()
- 多个ObjectAnimator对象时,通过AnimatorSet类,
a. 顺序播放:animSet.playSequentially(串行顺序)
b. 同时播放:animSet.playTogether(动画对象们);
c. 自定义播放顺序:play(animator).with(animObj).before(animObj).after(animObj)
多媒体应用开发
- MediaPlayer和SoundPool
MediaPlayer | SoundPool | |
---|---|---|
作用 | 播放普通的音频文件 | 播放短促的音效 |
同一时刻 | 只能播放一个音频文件 | 可以同时播放多个音效 |
特点 | 占用内存资源大,有时间延迟,性能消耗较大 | 性能较高,效率较快,资源内存占用小 |