志在指尖
用双手敲打未来

Android四大组件

ContentProvider
ContentProvider(内容供给者)是Android中的四大组件之一。首要用于对外共享数据,也便是经过ContentProvider把使用中的数据共享给其他使用访问,其他使用能够经过ContentProvider对指定使用中的数据进行操作。ContentProvider分为系统的和自界说的,系统的也便是例如联系人,图片等数据。
android中对数据操作包括有:file,sqlite3,Preferences,ContectResolver与ContentProvider。前三种数据操作办法都只是针对本使用内数据,程序不能经过这三种办法去操作其他使用内的数据。
android中供给ContectResolver与ContentProvider来操作其他使用程序的数据。Android
使用办法:
一个使用完成ContentProvider来供给内容给其他使用来操作,
一个使用经过ContentResolver来操作其他使用数据,当然在自己的使用中也能够。
以下这段是GoogleDoc中对ContentProvider的大致概述:
内容供给者将一些特定的使用程序数据供给其它使用程序使用。内容供给者承继于ContentProvider基类,为其它使用程序取用和存储它办理的数据完成了一套规范办法。然而,使用程序并不直接调用这些办法,而是使用一个ContentResolver目标,调用它的办法作为代替。ContentResolver能够与任意内容供给者进行会话,与其协作来对所有相关交互通讯进行办理。
ContentProvider
Android供给了一些首要数据类型的ContentProvider,比如音频、视频、图片和私家通讯录等。可在android.provider包下面找到一些Android供给的ContentProvider。经过取得这些ContentProvider能够查询它们包括的数据,当然前提是已取得适当的读取权限。
首要办法:
publicbooleanonCreate()在创立ContentProvider时调用
publicCursorquery(Uri,String[],String,String[],String)用于查询指定Uri的ContentProvider,回来一个Cursor
publicUriinsert(Uri,ContentValues)用于增加数据到指定Uri的ContentProvider中
publicintupdate(Uri,ContentValues,String,String[])用于更新指定Uri的ContentProvider中的数据
publicintdelete(Uri,String,String[])用于从指定Uri的ContentProvider中删去数据
publicStringgetType(Uri)用于回来指定的Uri中的数据的MIME类型
假如操作的数据归于调集类型,那么MIME类型字符串应该以vnd.android.cursor.dir/最初。
例如:要得到所有person记载的Uri为content://contacts/person,那么回来的MIME类型字符串为”vnd.android.cursor.dir/person”。
假如要操作的数据归于非调集类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/最初。
例如:要得到id为10的person记载的Uri为content://contacts/person/10,那么回来的MIME类型字符串应为”vnd.android.cursor.item/person”。
ContentResolver
当外部使用需求对ContentProvider中的数据进行增加、删去、修改和查询操作时,能够使用ContentResolver类来完成,要获取ContentResolver目标,能够使用Context供给的getContentResolver()办法。
ContentResolvercr=getContentResolver();
ContentResolver供给的办法和ContentProvider供给的办法对应的有以下几个办法。
publicUriinsert(Uriuri,ContentValuesvalues)用于增加数据到指定Uri的ContentProvider中。
publicintdelete(Uriuri,Stringselection,String[]selectionArgs)用于从指定Uri的ContentProvider中删去数据。
publicintupdate(Uriuri,ContentValuesvalues,Stringselection,String[]selectionArgs)用于更新指定Uri的ContentProvider中的数据。
publicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder)用于查询指定Uri的ContentProvider。
Uri
Uri指定了将要操作的ContentProvider,其实能够把一个Uri看作是一个网址,咱们把Uri分为三部分。
第一部分是”content://”。能够看作是网址中的”http://”。
第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部使用需求根据这个标识来找到它。能够看作是网址中的主机名,比如”blog.csdn.net”。
第三部分是路径名,用来表示将要操作的数据。能够看作网址中细分的内容路径。
Broadcastreceiver
BroadcastReceiver用于异步接纳播送Intent。首要有两大类,用于接纳播送的:
正常播送Normalbroadcasts(用Context.sendBroadcast()发送)是彻底异步的。它们都运行在一个未界说的次序,通常是在同一时间。这样会更有用,但意味着receiver不能包括所要使用的成果或中止的API。
有序播送Orderedbroadcasts(用Context.sendOrderedBroadcast()发送)每次被发送到一个receiver。所谓有序,便是每个receiver履行后能够传达到下一个receiver,也能够彻底中止传达–不传达给其他receiver。而receiver运行的次序能够经过matchedintent-filter里边的android:priority来操控,当priority优先级相同的时分,Receiver以任意的次序运行。
要注意的是,即使是Normalbroadcasts,系统在某些情况下可能会康复到一次传达给一个receiver。特别是receiver可能需求创立一个进程,为了防止系统超载,只能一次运行一个receiver。
BroadcastReceiver并没有供给可视化的界面来显现播送信息。能够使用Notification和NotificationManager来完成可视化的信息的界面,显现播送信息的内容,图标及轰动信息。
生命周期
一个BroadcastReceiver目标只要在被调用onReceive(Context,Intent)的才有用的,当从该函数回来后,该目标就无效的了,结束生命周期。
因此从这个特征能够看出,在所调用的onReceive(Context,Intent)函数里,不能有过于耗时的操作,不能使用线程来履行。关于耗时的操作,请startservice来完成。由于当得到其他异步操作所回来的成果时,BroadcastReceiver可能已经无效了。
发送播送事情的播送比较简单,构建Intent目标,可调用sendBroadcast(Intent)办法将播送宣布。另外还有sendOrderedBroadcast(),sendStickyBroadcast()等办法,请查阅APIDoc。
newIntentwithactionname
Intentintent=newIntent(Stringaction);
或许只是newIntent,然后
intent.setAction(Stringaction);
setdata等预备好了后,inactivity,
sendBroadcast(Intent);//发送播送
接纳播送经过界说一个承继BroadcastReceiver类来完成,承继该类后覆盖其onReceiver办法,并在该办法中呼应事情。
注册Receiver
静态办法,在AndroidManifest.xml的application里边界说receiver并设置要接纳的action。
动态办法,在activity里边调用函数来注册,和静态的内容差不多。一个形参是receiver,另一个是IntentFilter,其间里边是要接纳的action。并且动态注册,需求特别注意的是,在退出程序前要记住调用Context.unregisterReceiver()办法·`。一般在activity的onStart()里边进行注册,onStop()里边进行刊出。官方提醒,假如在Activity.onResume()里边注册了,就必须在Activity.onPause()刊出。
publicclassHelloDemoextendsActivity{
privateBroadcastReceiverreceiver;
@Override
protectedvoidonStart(){
super.onStart();
receiver=newCallReceiver();
registerReceiver(receiver,newIntentFilter(“android.intent.action.PHONE_STATE”));
}
@Override
protectedvoidonStop(){
unregisterReceiver(receiver);
super.onStop();
}
}
小结:
关于sendBroadCast的intent目标,需求设置其actionname;
引荐使用显式指明receiver,在配置文件AndroidManifest.xml指明;
一个receiver能够接纳多个action;
每次接纳播送都会重新生成一个接纳播送的目标,再次调用onReceive;
在BroadCast中尽量不要处理太多逻辑问题,主张复杂的逻辑交给Activity或许Service去处理。

未经允许不得转载:IT技术网站 » Android四大组件
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载