当前位置: 代码迷 >> Android >> Android学习03-Android使用的基本组件介绍
  详细解决方案

Android学习03-Android使用的基本组件介绍

热度:18   发布时间:2016-05-01 14:26:32.0
Android学习03-----Android应用的基本组件介绍

?

Android应用通常由一个或多个组件组成,而最常用的组件是Activity,另外还包括ServiceBroadcastReceiverContentProviderIntent。这里我想先简单说说这几个组件让自己有个大致的认识,在后面的博客中再作详细的梳理。

?

ActivityView

ActivityAndroid应用中负责与用户交互的组件,如果大家学过Swing可以和JFrame比较,JFrame本身可以设置布局管理器,不断地想JFrame中添加组件,但Activity只能通过setContentView(View)来显示指定组件。

View组件是所有UI控件、容器控件的基类,View组件就是Android应用中用户可以看到的部分。但View最贱需要放到容器组件中或者使用Activity将它显示出来。如果需要通过某个Activity把指定View显示出来,调用ActivitysetContentView()方法即可。

?

setContentView可以接受一个View对象作为参数:

//创建一个线性布局管理器, LinearLayout是ViewGroup的子类,ViewGroup又是View的子类LinearLayout layout = new LinearLayout(this);//设置该Activity显示layoutSuper.setContentView(layout);

?

setContentView可以接受一个布局管理资源的ID作为参数:

//设置该Activity显示main.xml文件定义的ViewsetContentView(R.layout.main);

?

ActivityAndroid应用提供了可视化用户界面,可以理解成一个基本的组成单元,如果该Android应用需要多个用户界面,那么这个Activity应用将会包含多个Activity,通过这些程序可以完成一个个的界面显示及事件处理,多个Activity组成Activity栈,当前活动的Activity位于栈顶。

?

Activity包含一个setTheme(int resid)方法来设置其窗口的风格,如果我们希望窗口不显示标题、以对话框形式显示窗口,都可以通过该方法来实现。

?

Service

ServiceActivity的地位是并列的,它也代表一个单独的Android组件。ServiceActivity的区别在于Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用界面。

?????? Activity组件需要继承Activity基类相似,Service组件需要继承Service基类。一个Service组件被运行起来之后,它将拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

?

BroadcastReceiver

?????? BroadcastReceiver代表广播消息接收器。如果我们从代码实现角度来看,BroadcastReceiver非常类似于事件编程中的监听器,与普通事件监听器不同的是:普通事件监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用中的其他组件。

?????? 使用BroadcastReceiver组件只要实现自己的BroadcastReceiver子类,并重写onReceive(Context context,Intent intent)方法即可。当其他组件通过sendBroadcast()sendStickyBroadcast()sendOrderedBroadcast()方法发送广播消息时,如该BroadcastReceiver也对该消息“感兴趣”(通过IntentFilter配置),BroadcastReceiveronReceive(Context context,Intent intent)方法将会被触发。

?????? 我们是实现了自己的BroadcastReceiver之后,通常有两种方式来注册这个系统级的“事件监听器”:

? ? ? ? ? ? ?1、?Java代码中通过Context.registReceiver()方法注册BroadcastReceiver

? ? ? ? ? ? ? 2、AndroidManifest.xml文件中使用<receiver>元素完成注册;

?

ContentProvider

?????? 我们知道,对于Android应用而言,它们必须相互独立,各自运行在自己的Dalvik虚拟机实例中,如果这些Android应用之间需要实现实时的数据交换。例如我们开发了一个发送短信的程序,当发送短信时需要从联系人管理应用中读取指定联系人的数据,这就需要多个应用程序之间进行实时的数据交换。

?????? Android系统为这种跨应用的数据交换提供了一个标准:ContentProvider。当用户实现自己的ContentProvider时,需要实现如下几个抽象方法:

? ? ? ? ? ? ? 1、insert(Uri,ContentValues):向ContentProvider插入数据

? ? ? ? ? ? ? 2、delete(Uri,ContentValues):删除ContentProvider中指定数据

? ? ? ? ? ? ? 3、update(Uri,ContentValues,String,String[]):更新ContentProvider中指定数据

? ? ? ? ? ? ? 4、query(Uri,Stirng[],String,String[],String):从ContentProvider查询数据。

?????? 通常与ContentProvider结合使用的是ContentResolver,一个应用程序使用ContentProvider暴露自己的数据,而另一个应用程序通过ContentResolver来访问数据。

?

IntentIntentFilter

?????? 严格来说,Intent并不是Android应用的组件,但是它对于Android应用的作用非常之大,它是Android应用内不同组件之间通信的载体。当Android运行时需要连接不同的组件时,这时就需要Intent了。Intent可以启动应用中另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息来触发系统中的BroadcastReceiver,即ActivityServiceBroadcastReceiver三种组件之间的通信都以Intent作为载体,只是不同组件使用Intent的机制略有区别而已。

?????? 1、当需要启动一个Activity时,可调用ContextstartActivity(Intent intent)方法,该方法中的Intent参数封装了需要启动的目标Activity的信息;

?????? 2、当需要启动一个Service时,可调用ContextstartService(Intentintent)方法或bindService(Intent service,ServiceConnectionconn,int flags)方法,这两个方法中的Intent参数封装了需要启动的目标Service信息;

?????? 3、当需要触发一个BroadcastReceiver时,可调用ContextsendBroadcast(Intent intent)sendStickyBroadcast(Intentintent)sendOrderedBroadcast(Intent intent,StringreceiverPermission)方法来发送广播消息,这三个方法中的Intent参数封装了需要触发的目标BroadcastReceiver的信息。

通过上面可以发现Intent都是封装了需要启动或触发的目标组件的信息,所有很多资料上都将Intent翻译为“意图”。

?????? 当一个组件通过Intent表示了启动或触发另一个组件的“意图”后,这个意图可分为两类:

? ? ? ? ? ? ?1、?显式Intent:显式Intent明确指定需要启动或触发的组件的类名;

? ? ? ? ? ? ? 2、隐式Intent:隐式Intent只是指定需要启动或触发的组件应满足的条件;

对于显示Intent而言,Andoid系统无须对该Intent做任何解析,系统直接找到指定的目标组件,启动或触发即可。

对于隐式Intent而言,Android系统需要对该Intent进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标组件,如果找到符合条件的组件,就启动或触发他们。

那么Android系统如果判断被调用组件是否符合隐式Intent呢?这就需要靠IntentFilter来实现了,被调用组件可通过IntentFilter来声明自己所满足的条件,也就是声明自己到底能处理哪些隐式Intent

?

?

OK,以上主要是让自己对Android的几个组件有个整体的认识和了解。?

?

?

?

?

?

?

  相关解决方案