Android 面试题总结之Android 基础(二)

Android 面试题总结之Android 基础ContentProvider(二)

在上一章节Android 面试题总结之Android 基础Activity(一) 我们讲的Activity基础知识。有许多朋友反映看着比较乱,我又回去看了看 ,确实很乱,不够细心。然后我又重新整理了一遍。让大家阅读体验更好!

在阅读过程中有任何问题,请及时联系。

本章系《Android 之美 从0到1 – 高手之路》Android基础ContentProvider 总结了Android 开发者面试比较常见的ContentProvider和Intent相关面试问题。希望对广大Android 开发者,有所帮助。

  • Android 面试题总结之Android 基础ContentProvider二

    • ContentProvider 常见知识点

ContentProvider 常见知识点

  1. ContentProvider 是如何实现数据共享的

    在 Android 中如果想将自己应用的数据(一般多为数据库中的数据)提供 给第三发应用,那么我们只能通过 ContentProvider 来实现了。

    ContentProvider 是应用程序之间共享数据的接口。使用的时候首先自定义 一个类继承 ContentProvider,然后覆写 query、insert、update、delete 等 方法。因为其是四大组件之一因此必须在 AndroidManifest 文件中进行注册。

    把自己的数据通过 uri 的形式共享出去

    android 系统下 不同程序 数据默认是不能共享访问 需要去实现一个类去继承 ContentProvider

    public class PersonContentProvider extends ContentProvider{    public boolean onCreate(){
    } query(Uri, String[], String, String[], String)
    insert(Uri, ContentValues)
    update(Uri, ContentValues, String, String[]) delete(Uri, String,  String[])
    }
    

    “`

  第三方可以通过 ContentResolver 来访问该 Provider。

2. **Android 的数据存储方式**

  a. File 存储
  b. SharedPreference 存储
  c. ContentProvider 存储
  d. SQLiteDataBase 存储
  e. 网络存储

关于ContentProvider相关基础知识点,本章节就先总结到这来。希望对大家有所帮助。

3. **为什么要用 ContentProvider?它和 sql 的实现上有什么差别?**

  ContentProvider 屏蔽了数据存储的细节,内部实现对用户完全透明,用户只 需要关心操作数据的 uri 就可以了,ContentProvider 可以实现不同 app 之间 共享。
Sql 也有增删改查的方法,但是 sql 只能查询本应用下的数据库。而 ContentProvider 还可以去增删改查本地文件. xml 文件的读取等。

4. **说说ContentProvider 、 ContentResolver 、 ContentObserver 之间的关系**

   a. ContentProvider 内容提供者,用于对外提供数据
   b. ContentResolver.notifyChange(uri)发出消息
   c. ContentResolver 内容解析者,用于获取内容提供者提供的数据
   d. ContentObserver 内容监听器,可以监听数据的改变状态
   e. ContentResolver.registerContentObserver()监听消息。

5. **Uri介绍**
  为系统的每一个资源给其一个名字,比方说通话记录。
1)、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。
2)、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C,D 4个部分:
A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;"content://"
 B:URI 的标识,用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的类名。这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称
 C:路径(path),通俗的讲就是你要操作的数据库中表的名字,或者你也可以自己定义,记得在使用的时候保持一致就可以了;"content://com.bing.provider.myprovider/tablename"
 D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部; "content://com.bing.provider.myprovider/tablename/#" #表示数据id。

6. **如何访问 asserts 资源目录下的数据库?**
    把数据库db复制到 /data/data/packagename/databases/目录下
    然后直接就能访问了。

## Intent 详解
1. **Android Intent的使用**
    三大组件——Activity、Service和Broadcast Receiver都是被什么激活的?
答案:Intent是一种运行时绑定的消息机制,而三大组件——Activity、Service和Broadcast Receiver都是被消息激活的,这种消息就是Intent。
    一个Intent对象包括六个属性,请一一列举这六个属性。
答案:组件名(Component Name)、动作(Action)、数据(Data)、分类(Category)、额外信息(Extra)和标志(Flags)。

  答案:在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成。
正如网上一些人解析所说,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent在这里起着实现调用者与被调用者之间的解耦作用。
Intent传递过程中,要找到目标消费者(另一个Activity,IntentReceiver或Service),也就是Intent的响应者,有两种方法来匹配:

  1、显示意图: 伪代码
    ```
public TestB extents Activity
{
 .........
};
 public class Test extends Activity
{
     ......
     public void switchActivity()
     {
            Intent i = new Intent(Test.this, TestB.class);
            this.startActivity(i);
     }
} 

代码简洁明了,执行了switchActivity()函数,就会马上跳转到名为TestB的Activity中。

2、隐式意图:

隐式匹配,首先要匹配Intent的几项值:Action, Category, Data/Type,Component

如果填写了Componet就是上例中的Test.class)这就形成了显示匹配。所以此部分只讲前几种匹配。匹配规则为最大匹配规则,

1、如果你填写了Action,如果有一个程序的Manifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent就与这个目标Action匹配,如果这个Filter段中没有定义Type,Category,那么这个Activity就匹配了。但是如果手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明。

Action的值在Android中有很多预定义,如果你想直接转到你自己定义的Intent接收者,你可以在接收者的IntentFilter中加入一个自定义的Action值(同时要设定Category值为”android.intent.category.DEFAULT”),在你的Intent中设定该值为Intent的Action,就直接能跳转到你自己的Intent接收者中。因为这个Action在系统中是唯一的。

2、data/type,你可以用Uri来做为data,比如Uri uri = Uri.parse(http://www.google.com );

Intent i = new Intent(Intent.ACTION_VIEW,uri);手机的Intent分发过程中,会根据http://www.google.com 的scheme判断出数据类型type

手机的Brower则能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW Action,也能处理http:的type,

3、至于分类Category,一般不要去在Intent中设置它,如果你写Intent的接收者,就在Manifest.xml的Activity的IntentFilter中包含android.category.DEFAULT,这样所有不设置Category(Intent.addCategory(String c);)的Intent都会与这个Category匹配。

4、extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。

  1. IntentFilter(Intent过滤器)

    为什么要引入IntentFilter?

    答案:对于显式Intent,它的接受者已被指定,所以系统会自动把这个Intent发给指定的组件。但是对于隐式Intent,由于并没有指定其组件名属性,所以系统不知道该把它发给哪个组件名,于是系统就直接将其发出去,算是所有的组件都有权接收,这就需要定义一个组件可以接收到哪些Intent,所以就引入了IntentFilter(Intent过滤器)。

  2. Intent 传递数据时,可以传递哪些类型数据?

    Intent 可以传递的数据类型非常的丰富,java 的基本数据类型和 String 以及他们的数组形式都可以,除此之 外还可以传递实现了 Serializable 和 Parcelable 接口的对象。

  3. Serializable 和 Parcelable 的区别?

    1.在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类。

    2.Serializable 在序列化的时候会产生大量的临时变量,从而引起频繁的 GC。

    3.Parcelable 不能使用在要将数据存储在磁盘上的情况。尽管 Serializable 效率低点,但在这种情况下,还是建

    议你用 Serializable 。 实现:

    1 Serializable 的实现,只需要继承 Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。

    2 Parcelabel 的实现,需要在类中添加一个静态成员变量 CREATOR,这个变量需要继承 Parcelable.Creator 接 口。

关于ContentProvider和Intent相关面试问题,本章节就先总结到这来。希望对大家有所帮助。

水平有限,若有错漏,欢迎指正,批评,如需转载,请注明出处–http://blog.csdn.net/vfush,谢谢!

时间: 2024-10-03 08:03:19

Android 面试题总结之Android 基础(二)的相关文章

Android 面试题总结之Android 基础(四)

Android 面试题总结之Android 基础Service(四) 在上一章节Android 面试题总结之Android 基础Broadcast Receiver(三) 我们讲了Broadcast Receiver基础知识.本节主要讲解Service相关基础知识,Service也是我们开发过程中经常使用到. 在阅读过程中有任何问题,请及时联系.如需转载请注明 fuchenxuan de Blog 本章系<Android 之美 从0到1 – 高手之路>Android基础Service 总结了A

Android 面试题总结之Android 进阶(二)

Android 之美 从0到1 之Android 进阶(二) 在上一章节中<Android 之美 从0到1 之Android 进阶(一)>中我们已经理解了一些View的基本知识并且知道如何自定义View.那么本章节将继续深入理解View,关于View的绘制流程,View的事件分发.刷新机制等等. 在阅读过程中有任何问题,请及时联系.如需转载请注明 fuchenxuan blog 本章系<Android 之美 从0到1 – 高手之路>Android 深入理解View的绘制流程. An

Android 面试题总结之Android 基础(六)

Android 面试题总结之Android 基础(六) 在上一章节Android 面试题总结之Android 基础ListView(五) 主要是ListView的优化,原理以及一些基本问题. 在阅读过程中有任何问题,请及时联系.如需转载请注明 fuchenxuan de Blog 本章系<Android 之美 从0到1 – 高手之路>Android基础将会总结了Android 布局常见面试问题.其实对于基础方面Android 开发来说,经常面试无非就是UI,网络,数据库,这三大方面,本章节总结

Android 面试题总结之Android 基础(一)

Android 面试题总结之Android 基础(一) 转眼间毕业好久了,写程序也很久了,从高中就一直写到现在好多年了啊,学习了很多东西,把之前整理的资料和知识点慢慢分享出来.这里主要总结Android可能出的面试的题目比较全面\详细,持久更新,也欢迎大家补充,纠正,批评. Android四大组件简介 请简要介绍Android的四大组件. 答案:Android系统有四种组件,这四种组件构成了Android应用的框架,然后由Intent联系这四种组件. Activity用来显示Android的程序

Android 面试题总结之Android 进阶(一)

Android 面试题总结之Android 进阶(一) 在前几篇文章中都是讲的基础,大家应该会觉得非常熟悉,但往往我们可能对于基础某些细节认识不够彻底或贯穿不全,我一直认为基础都是比较难的,那么本章节终于到进阶啦,主要讲的是View 的相关知识,在前面<Android 面试题总结之Android 基础 (六)>中已经对View有了一定的了解,由于内容较多且也是面试必考题,所以将分两篇继续深入的理解View. 在阅读过程中有任何问题,请及时联系.如需转载请注明 fuchenxuan de Blo

Android面试题 描述一下android的系统架构

android系统架构从下往上为linux内核层.运行库.应用程序框架层和应用程序层. Linux Kernel:负责硬件的驱动程序.网络.电源.系统安全以及内存管理等功能. Libraries和android Runntime: Libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit(引擎),该函数库负责android网页浏览器的运行,例如标准的c函数库libc.openssl.sqlite等,当然也包括支持游戏开发2dsgl和3dopengles,在多媒体

Android面试题基础(转)

71道经典Android面试题和答案 1.下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 2.下面异常是属于Runtime Exception 的是(abcd)(多选) A.ArithmeticException B.IllegalArgumentException C.NullPointerException D.BufferUnd

android基础二之ToggleButton

//activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_

cocos creator基础-(二十三)android环境搭建、h5/android 打包发布

1: 了解h5打包发布,要注意的事项; 2: 完成android环境配置与creator 项目android打包; 3: 使用 eclips打开项目或android-studio; h5打包发布 1:引擎模块裁剪,减少引擎体积; 2: resources目录的特性,减少setting.js体积; 3: 订制启动的logo,与样式; 4: resources特性 a:creator里面会根据场景的依赖来打包的我们的资源, 资源没有用的,将不会被打包进来; b:有时候我们需要代码加载我们的资源, c