0%

ContentProvider 简介

内容提供程序(Content Provider)是 Android 应用程序四大组件之一,它提供了对应用使用的底层数据的抽象,使其他应用可以通过 ContentResolver 接口访问其数据,而无需了解数据的具体存储方式。

使用 ContentProvider

实现 ContentProvider 类

ContentProvider 是一个抽象类,开发者需要实现其中一些方法才能使用:

  • onCreate(): 用来初始化内容提供程序提供程序。
  • query(Uri, String[], Bundle, CancellationSignal): 返回数据给调用者。
  • insert(Uri, ContentValues): 插入新数据。
  • update(Uri, ContentValues, String, String[]): 更新现有的数据。
  • delete(Uri, String, String[]): 删除数据。
  • getType(Uri): 返回数据的 MIME 类型。

注意数据访问的方法可能被多个线程同时访问,因此需要做到线程安全。

配置清单文件

仅仅一个自定义类还不够,ContentProvider与activity、service一样,需要在AndroidManifest.xml文件中进行配置。

阅读全文 »

Android 广播机制介绍

类似于发布-订阅设计模式,Android 应用可以与其他应用相互收发广播消息,还可以接收 Android 系统的广播消息。例如,Android 系统会在系统启动或设备开始充电时发送广播。再比如,应用可以发送自定义广播来通知其他应用它们可能感兴趣的事件。

应用可以注册接收特定的广播,这样系统会在广播发出后传送给这些应用。

按发送方式分类,广播可分为有序广播、常规广播、本地广播;按定义方式分类,可分为系统广播、自定义广播。此外,广播接收器可分为清单声明的接收器与上下文注册的接收器。

阅读全文 »

背景知识

进程与线程

类似其他操作系统的相应概念,Android 的进程拥有独立的虚拟内存空间,而线程与同一进程内的其他线程共享内存,只拥有各自的栈空间、程序计数器和寄存器等少量独占资源。
当 Android 启动一个之前未运行的应用的组件时,会为其启动一个包含单个主线程"main"的新的 Linux 进程。默认情况下,同一应用的所有组件会在此进程内启动,并且使用同一执行线程。
开发者可以人为安排组件在单独的进程中运行,并且为进程创建额外的线程。

Android 线程

每个 Android 应用都有一个主线程,也称界面线程,负责绘制 UI,处理用户交互以及接收生命周期事件。Android UI 操作不是线程安全的,这些操作必须在主线程执行。
为了不拖慢主线程,任何长时间运行的计算和操作都应在后台线程完成,避免 ANR。使用多线程还可以充分利用多核处理器的优势,通过并行提高运行速度。

阅读全文 »