ContentProvider ,Service

本文详细介绍了Android中ContentProvider的原理与应用场景,包括数据共享、访问系统资源、异步数据加载等内容。同时,还深入探讨了Service组件的功能、生命周期及其在后台任务中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、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 应用优势?(异步加载,防内存泄露,数据缓存,便于管理)

//======================================================


二Service 组件

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方法(此方法运行在工作线程),在此方法中执行我们的业务处理就可以了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值