云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 安卓面试基础知识总结

安卓面试基础知识总结

  • 62 次阅读
  • 3 次下载
  • 2025/12/9 8:39:02

4 ContentProvider

4.1 ContentProvider

数据库在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。

不能将数据库设为WORLD_READABLE,每个数据库都只能创建它的包访问, 这意味着只有由创建数据库的进程可访问它。如果需要在进程间传递数据, 则可以使用AIDL/Binder或创建一个ContentProvider,但是不能跨越进程/包边界直接来使用数据库。

一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。

也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。

外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,

重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,

当然,中间也会涉及一些权限的问题。下边列举一些较常见的接口,这些接口如下所示。

· query(Uri uri, String[] projection, String selection, String[]

selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。

· insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。

· update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。

· delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。

4.2 ContentResolver

外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当中通过getContentResolver()可以得到当前应用的 ContentResolver实例。

ContentResolver提供的接口和ContentProvider中需要实现的接口对应,主要有以下几个。

? query(Uri uri, String[] projection, String selection, String[]

selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。

? insert(Uri url, ContentValues values):将一组数据插入到Uri 指

定的地方。

? update(Uri uri, ContentValues values, String where, String[]

selectionArgs):更新Uri指定位置的数据。

? delete(Uri url, String where, String[] selectionArgs):删除指

定Uri并且符合一定条件的数据。

4.3 ContentObserver

在注册,翻译成中文就是内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理。ContentObserver一般和系统或第三方程序提供的Provider一起使用,这些Provider一般情况下会有一个Uri,然后ContentObserver就去监听这些Uri数据的变化,然后做出相应的处理。

4.4 ContentProvider和ContentResolver中用到的Uri

在ContentProvider和 ContentResolver当中用到了Uri的形式通常有两种,一种是指定全部数据,另一种是指定某个ID的数据。

我们看下面的例子。 · content://contacts/people/ 这个Uri指定的就是全部的联系人数据。 · content://contacts/people/1 这个Uri指定的是ID为1的联系人的数据。

在上边两个类中用到的Uri一般由3部分组成。

· 第一部分是方案:\这部分永远不变

· 第二部分是授权:\

· 第二部分是路径:\(如果没有指定ID,那么表示返回全部)。

由于URI通常比较长,而且有时候容易出错,且难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串的使用,例如下边的代码:

Contacts.People.CONTENT_URI (联系人的URI)。 在我们的实例MyProvider中是如下定义的:

public static final String AUTHORITY=\public static final String PATH_SINGLE=\public static final String PATH_MULTIPLE=\public static final Uri

content_URI=Uri.parse(\

5 Service如何向Activity传递数据

一个Android程序可以由多个Activity和Servier组成,在这些程序组件之间传递数据的方法有以下几种,每种方法都有其特定的使用途径。

5.1 原始数据类型

在Activity/Servier之间传递临时性的原始数据,可以使用Intent的putExtras方法来传递数据。

若传递的数据需要长久保存,则使用SharedPreference类来完成。

5.2 传递对象

当在Activity/Servier之间传递不需要长久保存的对象时,可以使用以下几种途径:

(1)通过Application类,每个Android应用程序都有一个Application类。当你在程序的AndroidManifest.xml中给Application设定一个名字时,你的程序中就必须有一个Application的子类。这个Application子类会被Android自动实例化,并且是一个全局性的类,它的生命周期和程序的生命周期相同,你可以把一些全局性的对象保存在Application类中。Application类可以通过getApplication()获得。

(2)通过HashMap of WeakReferences传递对象。当一个Activity需要向另外一个Activity传递对象时,可以使用一个关键字把对象存在一个HashMap中,并把这个关键字通过Internt的Extras发给目标Activity,目标Activity接到该关键字后使用该关键字把对象从HashMap中取出。

5.3 在Activity/Service之间传递需要长久保存的对象时,可以使

用以下的方式

1. 2. 3. 4.

Application Preferences Files

contentProviders SQLite DB

6 AsyncTask

6.1 底层处理

底层使用本地线程池机制:

1. 核心线程数:线程池中保存的线程数,包括空闲线程,默认为5个 2. 线程池中允许的最大线程数,固定为128个+10个阻塞线程

3. 当线程数大于核心线程数时,如果线程池中中线程数大于核心线程数5

超过一秒事,终止多余的线程,保留五个核心线程数。

4. 执行前用于保持任务的队列,此队列仅保持execute方法提交的

Runnable任务,固定容量为10 5. 执行程序创建新线程时使用的工厂

6.2 AsyncTask介绍

Android的AsyncTask比Handler更轻量级一些(只是代码上轻量一些,而实际上要比handler更耗资源),适用于简单的异步处理。

首先明确Android之所以有Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的。

Android为了降低这个开发难度,提供了AsyncTask。AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。

AsyncTask直接继承于Object类,位置为android.os.AsyncTask。要使用AsyncTask工作我们要提供三个泛型参数,并重载几个方法(至少重载一个)。

AsyncTask定义了三种泛型类型 Params,Progress和Result。 Params 启动任务执行的输入参数,比如HTTP请求的URL。 Progress 后台任务执行的百分比。

Result 后台执行任务最终返回的结果,比如String。

使用过AsyncTask 的同学都知道一个异步加载数据最少要重写以下这两个方法:

doInBackground(Params?) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通

搜索更多关于: 安卓面试基础知识总结 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

4 ContentProvider 4.1 ContentProvider 数据库在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。 不能将数据库设为WORLD_READABLE,每个数据库都只能创建它的包访问, 这意味着只有由创建数据库的进程可访问它。如果需要在进程间传递数据, 则可以使用AIDL/Binder或创建一个ContentProvider,但是不能跨越进程/包边界直接来使用数据库。 一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。 也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com