本文主要是介绍Android 面试题总结之Android 基础ContentProvider(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在上一章节Android 面试题总结之Android 基础Activity(一) 我们讲的Activity基础知识。有许多朋友反映看着比较乱,我又回去看了看 ,确实很乱,不够细心。然后我又重新整理了一遍。让大家阅读体验更好!
在阅读过程中有任何问题,请及时联系。
本章系《Android 之美 从0到1 – 高手之路》Android基础ContentProvider 总结了Android 开发者面试比较常见的ContentProvider和Intent相关面试问题。希望对广大Android 开发者,有所帮助。
- Android 面试题总结之Android 基础ContentProvider二
- ContentProvider 常见知识点
ContentProvider 常见知识点
-
ContentProvider 是如何实现数据共享的
在 Android 中如果想将自己应用的数据(一般多为数据库中的数据)提供 给第三发应用,那么我们只能通过 ContentProvider 来实现了。
ContentProvider 是应用程序之间共享数据的接口。使用的时候首先自定义 一个类继承 ContentProvider,然后覆写 query、insert、update、delete 等 方法。因为其是四大组件之一因此必须在 AndroidManifest 文件中进行注册。
把自己的数据通过 uri 的形式共享出去
android 系统下 不同程序 数据默认是不能共享访问 需要去实现一个类去继承 ContentProvider- 1
- 2
- 3
- 4
- 5
- 6
“`
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
代码简洁明了,执行了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里,传给电子邮件发送组件。
-
IntentFilter(Intent过滤器)
为什么要引入IntentFilter?
答案:对于显式Intent,它的接受者已被指定,所以系统会自动把这个Intent发给指定的组件。但是对于隐式Intent,由于并没有指定其组件名属性,所以系统不知道该把它发给哪个组件名,于是系统就直接将其发出去,算是所有的组件都有权接收,这就需要定义一个组件可以接收到哪些Intent,所以就引入了IntentFilter(Intent过滤器)。 -
Intent 传递数据时,可以传递哪些类型数据?
Intent 可以传递的数据类型非常的丰富,java 的基本数据类型和 String 以及他们的数组形式都可以,除此之 外还可以传递实现了 Serializable 和 Parcelable 接口的对象。 -
Serializable 和 Parcelable 的区别?
1.在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类。
2.Serializable 在序列化的时候会产生大量的临时变量,从而引起频繁的 GC。
3.Parcelable 不能使用在要将数据存储在磁盘上的情况。尽管 Serializable 效率低点,但在这种情况下,还是建
议你用 Serializable 。 实现:
1 Serializable 的实现,只需要继承 Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。
2 Parcelabel 的实现,需要在类中添加一个静态成员变量 CREATOR,这个变量需要继承 Parcelable.Creator 接 口。
关于ContentProvider和Intent相关面试问题,本章节就先总结到这来。希望对大家有所帮助。
这篇关于Android 面试题总结之Android 基础ContentProvider(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!