Android应用的四大基本组件简介

Android应用通常由四部分组成,包括:Activity Service BroadcastReceiver ContentProvider;本篇博客将对这四个组件做基本介绍,让大家对这些组件有一个大致的认识,后面的博客将还会对它们做详细讲解。

  1. Activity
Activity是android应用中负责与用户进行交互的的组件,就是我们android手机呈现界面的组件,你可以把它想象成相框,我们android应用呈现的画面都是在这个相框里面,而这个相框的大小就是我们手机屏幕的大小。他负责呈现画面给我们用户,并接受我们用户的点击 滑动等一系类响应事件。当我们把android应用要呈现的界面(XML文件)设计好后,然而activity只能通过setContentView(View) 来显示指定的界面,好比,我们把照片拍好后,选择用哪个相框来装载这张照片,因此这样 来为activity绑定显示界面。 setContentView(View)的使用一般是下面的形式:
<span style="font-size:14px;">setContentView(R.layout.main);</span>
其中的R.layout.main 是android资源文件中的一个布局文件,相当于是相片。 注意的是,实际上Actvity是Window的容器,Activity包含一个getWindow()方法,这个方法返回Activity所包含的窗口,对于Activity,作为开发者的我们是不用关心它的window对象,如果应用程序不用调用Activity的setContentView()方法来设置该activity的显示界面,那么该应用将显示一个空的窗口。 一个android应用包含很多个Activity,多个activity组成activity栈,存储方式为先进后出,就像箱子里面放书一样,先放进去的书放在最下面,最后放进去的在最上面,所以当前运行的activity位于栈顶。 还有一点就是我们Activity可以设计它自身的风格,就是主题,使用setTheme(int resouceId)就可以指定activity的使用风格,比如有些时候我们的activity不需要使用actionBar 或者以对话框的形式显示,就可以使用这个方法实现,也可以在AndroidManifest.xml指定activity的显示风格。

2. Service Service可以说 是和activity一样重要的,它只是没有显示界面而已,service通常运行在后台,因为没有界面显示,所以一般不需要与用户进行交互。 Service组件需要继承Service基类,Service运行之后拥有自己独立的生命周期,Service组件通常是用于为其他组件提供后台服务,或者监听其他组件的运行状态。其中典型的应用就是 音乐播放器,首页是activity呈现给用户的界面,后台播放音乐有Service来完成,Service播放了多少秒然后通知Activity更新界面。Activity的播放暂停按钮被用户点击了,然后通知Service停止或播放音乐。
3. BroadcastReceiver BroadcastReceiver 是 android 应用 中一个非常重要的组件,根据这个名字,大家肯定知道了它其实就是广播消息接收器,与普通的监听器不同的是:普通的监听器监听的事件源氏程序中的对象,而BroadcastReceiver监听的事件源是Android应用中的其他组件(activity receiver)。 使用broadcastReceiver组件接受广播消息比较简单,我们只需要实现自己的BroadcatReceiver子类,并重写onRecerver(Context context,Intent intent)方法即可。当其他组件通过sendBroadcast() 或者sentStickyBroadcast() 或者sentOrderBroadcast()方法发送广播消息时,如果该BroadcastReceiver对这个消息感兴趣,通过IntentFilter配置(这是一个过滤器,设置一些条件,如果某个消息和这些条件匹配,则激活BroadcastReceiver),BroadcastReceiver的onReceive()方法就会被激活,这个方法中设置的一些动作就会被执行。就像Service中播放音乐播放完了之后,它就通过sendBroadcast()向activity发送消息,activity收到消息后,就会执行BroadcastReceiver中的onReceive()中的方法,activity就会在界面上做出相应的界面更新。 BroadcastReceiver有两种注册方式,只有注册之后才能启动,否则是不会有消息发送和接收的。如下两种方法: (1). 在java代码中通过Context.registReceiver()方法注册BroadcastReceiver; (2).在AndroidManifest.xml中使用<receiver.../>元素完成注册; 这里只对BroadcastReceiver做简短介绍,后面的博客中将会对它进行详细讲解,并教会大家怎样开发和使用它。 4. ContentProvider 对于Android应用程序,它们是单独运行在自己的Dalvik虚拟机实例中,如果这些Android应用之间需要进行实时的数据交换,则需要contentProvider来完成这个工作,当要获取手机联系人时,就会用到它; ContentProvider是Android系统为跨应用的数据交换的一个标准,当用户实现自己的ContentProvider的时候,要实现它的以后4个方法: (1) insert(Uri, ContentValues):向ContentProvider插入数据; (2) delete(Uri, ContentValues):删除contentProvider中指定的数据; (3) update(Uri,ContentValues,String,String[ ]):更新ContentProvider中指定的ContentProvider; (4) query(Uri, String[ ], String ,String[ ],String): 从ContentResolver查询数据; 通常使用ContentProvider时都会结合使用ContentResolver,一个应用程序来暴露自己的数据给外界,而另一个程序则通过ContentResolver来访问数据;

5. Intent 和 IntentFilter intent在android 应 用 程序 中的地位非常之高,作用非常之大。它是Android应用程序内部不同组件之间通信的载体。当android运行时需要链接不同的组件时,就需要Intent来实现。Intent可以启动一个Activity,也可以启动一个Service,也可以通过发送广播消息来触发系统中的BroadcastReceiver。也就是说,intent是Activity,Service,BroadcastReceiver 这3个组件之间通信的载体,只是它们使用Intent的方式机制有些不同罢了。
(1)当需要启动一个activity时,可调用Context的startActivity(Intent intent)或者 startActivityForResult(Intent intent,int requestCode)方法,这两个方法中的intent都封装了需要启动的目标activity的信息; (2)当需要启动一个Service时,可调用Context的startService(Intent intent)或者bindService(Intent service, ServiceConnection conn,int flags)方法,这两个方法中的intent都封装了需要启动的目标service的信息; (3)当需要触发一个BroadcastReceiver时,可调用Context的sendBroadcast(Intent intent)或 sendStickyBroadcast(Intent intent) 或 sendOrderBroadcast(Intent intent,String receiverPermission) 方法来发送广播消息,这三个方法中的intent封装了需要触发的目标BroadcastReceiver 的信息 通过上面的介绍,可以看出,Intent封装了当前组件需要启动或触发的目标的信息,然而Intent分为两类:
(1) 显示 Intent :显示Intent明确指定需要启动或者触发的组件的类名; (2) 隐示 Intent:隐示Intent只是指定了需要启动启动或者触发的组件需要应满足怎样的条件;
对于显示Intent,Android系统无需对该Intent做任何解析,系统直接找到指定的目标组件,启动会触发它即可; 对于隐示Intent,Android系统需要对该Intent进行解析,解析出它的条件,然后去系统中查找与之匹配的目标组件。如果有满足条件的组件就启动或触发它。 隐示Intent通过IntentFilter来实现的,被调用组件可以通过IntentFilter来声明自己所满足的条件,就是声明自己到底能处理哪些Intent。Intent和IntentFilter有很多内容,后面的博客会做详细介绍。本次博客就介绍这么多。









更多相关文章

  1. 【android】ORMLite框架 的使用方法---给你的数据库操作插上翅膀
  2. Android中fragment A里面点击button跳转到fragment B实现方法
  3. Android(安卓)WheelView(滑轮组件)使用
  4. android 混淆文件project.properties和proguard-project.txt
  5. 关于android的listview的数据解析和性能优化问题
  6. Android(安卓)- ToDoList 详解
  7. android 中 unable to start service 错误解决方法
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Parrot Linux安装教程
  2. 如何绘制头发?板绘动漫人物头发画法
  3. tp6常用命令
  4. linux 安装 gitlab
  5. 图文详解laravel多对多关联模型
  6. 开发提效小技巧分享(二)
  7. laravel多视图共享数据实例代码
  8. 图文详解laravel多对多关联模型
  9. php比较两个指定的日期的实例讲解
  10. 意派Epub360丨融媒视频H5,这技能零基础也