Android 应用通常由一个或多个基本组件组成,前面我们看到Androi d 应用中最常用的组件就是Activity 。事实上Android 应用还可能包括Service、BroadcastReceiver、ContentProvider等组件,本节先让读者对这些组件建立一个大致的认识,后面的章节还会对这些组件做更详细的介绍。1、Activity 和ViewActiv ity 是Android 应用中负责与用户交互的组件一一大致上读者可以把它想象成Swing编程中的JFrame 控件。不过它与JFrame 的阿别在于: JFrame 本身可以设置布局管理器,不断地向JFrame 中添加组件, 但Acti v ity 只能通过setContentView (View)来显示指定组件。View 组件是所有UI 控件、容器控件的基类,View 组件就是Android 应用中用户实实在在看到的部分。但View 组件需要放到容器组件中, 或者使用Acti vi ty 将它显示出来。如果需要通过某个Activity 把指定View 显示出来,调用Activity 的setContentVi ew()方法即可。setContentView()方法可接受一个View 对象作为参数, 例如如下代码://创建一个线性布局管理费量LinearLayout layout = new LinearLayout (this) ;//设置该Activity 显示layoutsuper.setContentView(layout);上面的程序通过代码创建了一个LinearLayout 对象( 它是ViewGroup 的子类,ViewGroup又是View 的子类) ,接着调用Activity 的setContentView(layout)把这个布局管理器显示出来。setContentView()方法也可接受一个布局管理资源的B 作为参数,例如如下代码://设置该Activity 显示main.xml 文件定义的ViewsetContentView(R.layout.main);从这个角度来看,大致上可以把Activity 理解成S wing 中的JFrame 组件。当然,Activity可以完成的功能比JFrame 更多,此处只是简单地类比一下。2、ServiceService 与Activity 的地位姑并列的,它也代表一个单独的Andro id 组件。Service 与Activity的民别在于: Service 通常位于后台运行,它一般不需要与用户交瓦, 因此Service 组件投街剧形用户界面。与Activity组件需要继承Activity 基类相似, Service 组件简要继承Service 基挠。一个Service 组件被运行起来之后,它将拥有自己独立的生命周期,Service 组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。3、 BroadcastReceiverBroadcastReceiver是Android 应用中另一个重要的组件,顾名思义, BroadcastReceiver代表广播消息接收嚣。从代码实现角度来看, BroadcastRec iver 非常类似于事件编和中的监听器。与普通事件监听锦不同的是:普通事件监听器监听的事件源是程序中的对像; 而BroadcastReceiver 监听的事件源是Android 应用中的其他组件。4、ContentProviderAndroid 应用而言, 它们必须相互独立, 各自运行在自己的Dalik 虚拟机实例中,如果这些Android 应用之间而要实现实时的数据交换。例如我们开发了一个发送短倍的程序,当发送短信时需要从联系人管理应用中读取指定联系人的数据一一这就需要多个应用程序之间进行实时的数据交换。Android 系统为这种跨应用的数据交换提供了一个标准: ContentProvider 当用户实现自己的ContentProvider 时,需要实现如下抽象方法。◇insert(Uri, GontentValues): 向ContentProvider 插入数据.◇delete(Uri, ContentValues): 删除Go ntentProvider 中指定数据。◇udpate(Uri, ContentValues, String, String[]): 更新ContentProvider 中指定数据。◇query(Uri, String[], String, String[],tring): 从ContentProvider 查询数据。通常与ContentProvider 结合使用的是ContentResolver , 一个应用程序使用ContentProvider暴露自己的数据,而另一个应用程序则通过ContentResolver 来访问数据。5、Intent和IntentFilter严格地说. lntent 并不是Android 应用的组件, 但它对于Android 应用的作用非常大一一它是Android 应用内不同组件之间通信的载体。当Android 运行时需要连接不同的组件时,通常就需要借助于Intent 来实现。In忧nt 可以启动应用中另一个Activity . 也可以启动一个Service 组件, 还可以发送一条广播消息来触发系统中的BroadcastReceiver 。也就是说,Activity、Service 、BroadcastRecei ver 三种组件之间的通信都以lntent 作为载体,只是不同组件使用lntent 的机制略有区别而已。当需要启动一个Activity 时,可调用Context 的startActivity (Intent intent)方法,该方法中的Intent 参数封装了需要启动的目标Activity 的信息。当需要启动一个Service 时,可调用Context 的startService( lntent intent)方法或bindService(lntent service, ServiceConnection conn, int flags)方法,这两个方法中的Intent 参数封装了需要启动的目标Service 的信息。当需要触发一个BroadcastReceiver 时,可调用Context 的sendBroadcast( Intent intent) 、sendStickyBroadcast(lntent intent)或sendOrderedBroadcast(lntent intent, String receiverPermission)方法来发送广播消息,这三个方法中的Intent 参数封装了需要触发的茄子视频app目标BroadcastReceiver 的信息。当一个组件通过Intent 表示了启动或触发另一个组件的” 意阁”之后,这个意图可分为两类。> 显式Intent : 显式Intent 明确指定需要启动或者触发的组件的名称。> 隐式Intent: 隐式Intent 只是指定简要启动或者触发的组件应满足怎样的条件。对于显式lntent 而言. Android 系统无须对该Intent 做任何解析,系统直接找到指定的目标组件,启动或触发它即可。对于隐式lntent 而言. Android 系统需要对该Intent 进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标组件。如果找到符合条件的组件,就启动或触发它们。那么Android 系统如何判断被调用组件是否符合隐式Intent 呢?这就需要靠IntentFilter来实现了,被调用组件可通过IntentFilter 来声明自己所满足的条件一一也就是声明自己到底能处理哪些隐式Intent。关于Intent 和IntentFite香蕉在线appr 本书后面还会有进一步阐述,此处不再深入讲解。

发表评论

共有 0 条评论