Android学习之四大组件
Android学习之四大组件
abcijkxyz 发表于1年前
Android学习之四大组件
  • 发表于 1年前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

Activity(活动)

(1)一个Activity通常就是一个单独的屏幕(窗口)。
(2)Activity之间通过Intent进行通信,在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。
典型的动作类型有:M AIN(activity的门户)、VIEW、PICK、EDIT 等。而动作对应的数据则以URI 的形式进行表示。
(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
Sservice(服务)
(1)service用于在后台完成用户指定的操作,通常为其他组件提供后台服务或监控其他组件的运行状态,不可做耗时操作。service分为两种:
(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。
(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。
  (2)开发人员需要在AndroidManifest.xml配置文件中声明全部的service,使用<service></service>标签。
Content Provider(内容提供者)
(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
(2)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
(3)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。
BroadcastReceiver(广播接收器)
(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。
(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。
总结:
四大组件的注册
每个Activity、service、Content Provider都需要在AndroidManifest文件中进行配置。BroadcastReceiver 的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态调用Context.registerReceiver()的方式注册至系统。
四大组件的激活
BroadcastReceiver的激活:当接收到ContentResolver发出的请求后,内容提供者被激活。而其它三种组件activity、服务和广播接收器被一种叫做intent的异步消息所激活。
四大组件的关闭
Content Provider和BroadcastReceiver没有必要去显式的关闭。Activity关闭:调用finish()方法关闭。服务关闭:对于通过startService()方法启动的服务要调用Context.stopService()方法关闭服务,使用bindService()方法启动的服务要调用Contex.unbindService()方法关闭服务。
四大组件的生命周期
Activity
OnCreate(),OnStart(),OnRestart(),OnPause(),OnResume(),OnStop(),OnDestroy() ---系统自动调用
Service
OnCreate(),OnStartCommand(),onBind(),OnRebind(),onUnBind(),OnDestroy() ---系统自动调用
Content Provider
应用安装时就存在,卸载时消失,没有运行状态,仅仅是提供一个uri出去供其他应用调用。
BrodcastReceiver
生命周期只有十秒左右,如果在onReceive()内做超过十秒内的事情,就会报ANR(Application No Response)程序无响应的错误信息。它的生命周期为从回调onReceive()方法开始到该方法返回结果后结束。
共有 人打赏支持
粉丝 58
博文 6068
码字总数 1876
×
abcijkxyz
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: