一、ContentProvider
1.ContentPriovider 是什么?
1)Android 中核心应用组件(Component)之一
2)Android 中的内容提供者?
2.ContentProvider 应用场合?
ContentProvider 对象实现了APP内部数据的对外(可能是本进程的其它组件,
也可能是跨进程的组件)共享。
例如:
1)手机联系人数据对外共享。
2)手机相册中数据对外共享。
3).......
3.ContentProvider 应用的构成分析?
1)Data(要对外共享的数据)
2)ContentProvider对象(是对外共享)
3)URI(统一资源标识,用于标识具体资源)
4)ContentResolver对象(可以简单理解为ContentProvider的客户端对象)
4.ContentProvider 应用的具体实现?
1)ContentProvider 端的实现(暂且理解为服务端):数据提供端
a)数据(Data)
b)编写ContentProvider(直接或间接继承ContentProvider类)
c)注册ContentProvider(AndroidManifest.xml)
2)ContentResolver 端的实现(暂且理解为客户端):数据访问端
a)获得Context对象
b)获得ContentResolver对象
c)获得要访问的ContentProvider端的URI
d)执行ContentResolver对象的相关方法进行数据处理。
说明:ContentResovler对象方法中的方法名与ContentProvider端对象的方法基本是一致的,当我们执行ContentResolver对象的某个方法时,底层会根据方法名及参数设置访问ContentProvider端对应的方法。
重点掌握ContentProvider的访问流程,了解ContentProvider对象方法的构建。
5.访问Android系统提供的ContentProvider?(重点)
1)访问系统提供的媒体信息(音频,视频,图片)
2)访问系统提供的联系人信息
步骤:
1)获得ContentResovler
2)获得URI(Media,Phone,....)
3)执行查询(query(.....))
6.CursorLoader 在异步访问provider中的应用?
CursorLoader 底层默认采用异步加载机制访问数据,并可以对数据提供缓存机制,以提供对数据的访问效率。假如在Activity中要访问ContentProvider中提供的数据,建议使用CursorLoader.
CursorLoader 对象的应用步骤:
1)获得LoaderManager(getLoaderManager())
2)初始化CursorLoader (初始化的同时注册一个回调监听对象LoaderCallbacks)
3)执行监听对象中的相关方法?
a)onCreateLoader (初始化loader时执行)
b)onLoadFinished (数据加载完成执行)
c)onLoaderReset (loader重置或销毁时执行)
7.ContentProvider 应用FAQ?
1)ContentProvider 对象应用场合?(应用数据对外共享,例如微信访问联系人数据)
2)ContentProvider 对象应用优势?(提供了对数据的统一访问方式)
3)ContentProvider 对象对外共享数据的格式?(数据库,文件assert,....)
4)ContentResovler 对象的作用?(是ContentProvider对外的一个窗口)
5)URI 是什么,在ContentProvider应用中充当的角色?(统一资源标识,用于标识ContentProvider资源)
6)CursorLoader 应用优势?(异步加载,防内存泄露,数据缓存,便于管理)
//======================================================
1.Service 是什么?
1)Android 中核心应用组件(生命周期方法).
2)Android 中的Context(资源访问能力)
3)Android 中的应用服务(此服务不能呈现view,工作于后台)
2.Service 应用场合?
Service 通常用于执行一些"长时间"的后台耗时操作(这些耗时操作也是要启动工作线程的),例如下载,音乐的播放等.
FAQ?
Serivce 中启动工作线程执行长时间耗时操作相对于Activity启动
工作线程执行长时间耗时操作有什么优势?
Service 服务所在的进程运行在后台执行长时间的耗操作时生命力更加顽强。
Android 中进程的类型及生命力(如下由高到低)?
1)前台进程(正在于用户交互的进程):生命力最顽强,不允许被kill.
a)有activity正在前台运行(正在与用户交互)
b)有通知(Notification)绑定了正在运行的service
2)可见进程(进程可见,但不可操作)
3)服务进程(有service正在后台运行,且进程不可见)
4)后台进程(后台没有service运行,前台又没有可见组件在运行)
5)空进程(没有任何组件的进程)
Android 系统在内存不足时会选择一些优先级比较低的进程执行kill操作。
3.Service 的应用类型?
1) 启动模式的Service.
2) 绑定模式的Service.
3) 混合模式的Service.
4.Service 应用的构建?
1)创建Service (直接或间接的继承Service)
2)注册Service (在AndroidManifest.xml中进行注册)
3)启动或绑定service(startService,bindService,.....)
4)在Service对象相关生命周期方法中执行业务。
5.Service 启动模式的应用?
Service 启动模式相关操作:
1)创建Service,重写相关方法
2)注册Service (AndroidManifest.xml)
3)启动Service:startService(intent)
4)停止Service:stopService(Intent)
启动模式Service的生命周期方法:
1)onCreate():第一次启动时执行
2)onStartCommand:每次启动都会执行
3)onDestory():service 销毁时执行
启动模式Service中onStartCommand方法的返回值:
1)START_STICKY (表示service被非正常kill以后会自动重启)
2)START_STICKY_COMPATIBILITY(是START_STICKY 的一个兼容模式,但进程被非正常kill以后不保证能重新启动service)
3)START_NOT_STICKY(表示service被非正常kill以后不会重启service)
4)START_REDELIVER_INTENT(表示service被非正常kill以后会自动重启,并且会重新传递intent);
启动模式Service中onStartCommand方法的参数:
1)intent (用于值传递)
2)flags(表示service的启动方式,例如intent是否是重写传递的)
3)startId(表示第几次启动的service,后续可以通过stopSelf(startId)停止service)
6.IntentService 在启动模式中的应用?
IntentService 主要应用于启动模式,此对象在启动以后会自动创建一个工作线程(HandlerThread),我们可以在此工作线程中执行耗时操作,此耗时操作执行完成,Service会自动关闭。
在构建IntentService 应用时,我们需要构建此类的一个子类类型,然后重写onHandleIntent方法(此方法运行在工作线程),在此方法中执行我们的业务处理就可以了。