android四大组件之contentprovider与service简介

来源:互联网 发布:seo排名优化软件 编辑:程序博客网 时间:2024/06/11 04:35

1.Android核心组件---ContentProvider

=============================================================================== 

  1.ContentProvider是什么

    *Android中的一个应用组件(生命周期方法+其他)

    *Android中的内容提供者

  2.ContentProvider应用场合

*ContentProvider允许对应用程序私有数据的跨进程访问

  3.ContentProvider应用的构建及实现过程分析

*内容提供者(ContentProvider):提供对数据的访问

  (1)ContentProvider对象

  (2)URI(统一资源标识)

  (3)data(数据)

*内容访问者(ContentResolver):访问数据(允许跨进程)

  (1)Content(资源访问对象)

  (2)ContentResolver(跨进程访问ContentProvider)

  (3)获得访问ContentProviderURI,然后通过URI访问ContentProvider

  说明:对于一个内容提供者,可以对应多个内容访问者

  4.ContentProvider的案例应用

*访问媒体库(音频,图片,视频):关键是uri

(1)Content

(2)ContentResolver

(3)Media

*访问联系人

(1)Context

(2)ContentResolver

(3)Phone

  5.CursorLoader在访问ContentProvider时的应用

定义:CursorLoader本身是一个cursor对象加载器,底层会通过异步任务进行加载,数据加载完成后回调LoaderCallback接口中的相关方法,在这些方法中可进行UI更新

(1)CursorLoader应用步骤

  *初始化CursorLoader(activity中执行,并让activity实现LoaderCallback接口)

getLoaderManager().initLoader(0, args , this);

  *根据业务重写loaderCallback接口中的相关方法

   (1)创建CursorLoader(一般在onCreateLoader方法中执行)

(2)处理结果(onLoadFinished方法中执行)

(3)处理重置或销毁操作(onLoaderReset方法执行)

(2)CursorLoader应用的优势

  *底层异步加载(减少对主线程的阻塞)

  *底层减少内存泄漏

  *底层本身会对数据记性缓存(加入数据没有发生变化,再次查询会从缓存中取出)

  6.ContentProviderFAQ

    (1)ContentProvider是一个内容提供者,他提供数据的对外(对外指的是其他进程或其他    APP)共享

    (2)ContentProvider优势:对外界提供了本应用私有数据的统一访问方式

   (3)ContentProvider对外界公开的uri(统一资源标示)格式:content://authorities/path

   (4)ContentResolver对象的作用:相当于ContentProvider对外的接口

   (5)CursorLoader经常用于什么场合,优势是什么?(经常用于在activity异步访问   ContentProvider的场合)

(6)ContentProvider何时创建(项目启动时,并执行onCreate方法)

  7.综合案例(本地音乐要从媒体库只跟你去读)

 

2.Android核心组件---Service组件

=============================================================================== 

  *Service是什么?

(1)Android中的应用组件(生命周期方法)

(2)Android中的一个应用服务(一般运于后台,提供后台服务)

(3)Android中的一个context(资源访问)

  *Service应用场合

(1)Service一般用于长时间的后台服务,耗时操作.

(2)说明:Service执行耗时操作也是要启动工作线程

(3)FAQ:Service中启动工作线程和在activity中启动工作线程不同之处

activity中启动工作线程一般是短时间的耗时,长时间的耗时操作还是建议在 Service中启动的工作线程中,这是因为在Service启动工作线程执行长时间的耗时操作时,此线程的生命力可能更要顽强一些.Android中假如系统内存不足时可能会考虑优先kill一些优先级较低的进程(activity在后台运行时他所在的进程优先级相对较低,很可能被kill)

Android中进程的类型及优先级(从高到低)

  (1)前天进程(优先级最高,允许与用户进行直接交互)

  (2)可见进程(可见,不允许与用户进行交互)

  (3)服务进程(不可见,后台有service在运行后)

  (4)后台进程(不可见,后台没有service在运行后)

  (5)空进程(不可见,没有任何应用组件在运行)

  *Service组件应用类型

(1)启动模式Service

(2)绑定模式Service

(3)混合模式Service

  *Service组件的编写及注册

(1)编写:直接或间接继承Service类型(抽象类型)

(2)注册:AndroidManifest.xml清单文件进行声明

  *Service启动模式的应用

启动模式Service需要调用context对象的startService启动

启动模式Service生命周期方法:

  *onCreate(创建时执行)

  *onStartCommand(每次启动都执行)

  *onDestroy(销毁时执行)

启动模式onStartCommand方法返回值:(表示此service的粘性)

  * START_STICKY (具备粘性,service在被非正常kill以后还会重新启动)

  * START_STICKY_COMPATIBILITY (START_STICKY 返回值的兼容版本,但不保证被非正常 kill以后还会重新启动))

  * START_NOT_STICKY (不具备粘性,被非正常kill以后不会重启)

  * START_REDELIVER_INTENT(具备粘性,被非正常kill以后会重启同时会重新传递 intent)

*启动模式onStartCommand方法参数:

  *intent(意图对象,可以借助此对象进行参数传递)

  *flags(用于标识intent是否是重新传递的intent)

  *startId(用于标识这是哪一次请求)

* IntentService在启动模式中的应用

        IntentService是一个Service,通常应用于启动模式,并且内置工作线程,通过此工作线程可以执行长时间的耗时操作,此耗时操作直接结束,service会自动关闭,例如在下载是考虑使用此service.

我们使用IntentService,要构建此类型的子类类型然后重写相关抽象方法onHandleIntent(此方法运行在工作线程)

*Service绑定模式的应用

(1)Service绑定模式概述

  Service绑定模式相当于activityservice之间建立了一个长链接(ServiceConnection)

(2)Service对象的绑定与解绑定

  *bindService:绑定时传入一个ServiceConnection对象,成功后回调ServiceConnection    象的相关方法

  *unbindService:解绑定,假如在activity中执行了service的绑定操作,activity销毁之    前解除绑定操作,防止内存泄漏

(3)Service相关生命周期方法

  *onCreat(service创建时执行)

  *onBind(绑定时执行)

  *onUnBind(解除绑定时执行)

  *onDestory (Service销毁时执行)

*Service 混合模式应用

  Service 混合模式指的是既有Service绑定又有Service启动这些模式

的混合.我们在activity执行service绑定的时候有这样的一个特点,

activity页面销毁之前一定要解除绑定,但我们又不希望解除绑定以后

这个Service销毁,此时我们就可以在绑定成功以后去启动service,

这样在解除绑定以后Service可以仍旧服务于我们的应用,只有在执行

stopService时,此service才会停止。

 


0 0
原创粉丝点击