[基础] 3. Android四大组件

Android四大组件

四大组件:Activity,Service,Broadcast,ContentProvider

只有BroadcastReceiver可以在AndroidManifest或代码中册,其他都必须在AndroidManifest文件中注册
只有ContentProvider的调用不需要借助Intent,其他三个组件都需要借助Intent

  • Activity是一种展示型组件,户展示界面并和用户交互
    • 对用户来说Activity就是一个Android应用的全部,其他三大组件对用户都是不可感知的
    • 可由显式(package name + class name)或者隐式Intent(action)来启动
    • 只有一种运行模式:启动状态
    • 可以通过finish方法结束(最上面的Activity移出了栈)
  • Service是一种计算型组件,用于在后台执行计算任务
    • 有两种运行模式:启动状态和绑定状态
      • 启动状态:Service内部可以做一些后台计算,并且不需要和外界有直接的交互
      • 绑定状态:Service内部可以做一些后台计算的同时,外界可以很方便地和Service组件进行通信
      • Service的onBinde只会执行一次除非Service被终止了,其他会调用onRebind
    • 特别注意service本身是运行在主线程中的,因此耗时任务需要在单独的线程中去完成。
    • 超过20 seconds会提示ANR,建议使用线程池
    • 停止需要灵活采用stopService和unBindService两个方法
  • BroadcastReceiver广播是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息
    • 广播有两种注册方式:静态注册和动态注册
    • 静态注册是在AndroidManifest中注册,在应用安装的时候会被系统解析,不需要应用启动就可以收到相应的广播。
    • 动态注册需要通过Context.registerReceiver()来注册,需要应用启动才能注册并接收广播
    • 通过Context的一系列send发送广播,发送和接收过程匹配都是通过广播接收者额来描述
    • 低耦合的观察者模式
    • 不适合执行耗时操作,10 seconds就会ANR
    • BroadcastReceiver组件一般来说不需要停止,它也没有停止的概念
    • 默认广播不会发给已停止的应用(好像是Android 3.1开始)
  • ContentProvider是一种数据共享型组件,用于向其他组件乃至其他应用共享数据。
    • 内部需要实现增删改查四种操作
    • 一版来说ContentProvider都应该是单例的(默认android:mulitprocess 为false)
    • 内部维持一份数据集合可以通过数据库实现,也可以采用其他任何类型(比如List,Map等)。对数据集没有任何要求
    • 需要注意ContentProvider中的insert、delete、update、query方法需要处理好线程同步,因为这几个方法是在Binder线程池中被调用
    • ContentProvider组件也不需要手动停止
    • ContentProvider的OnCreate会先于Application的OnCreate执行

总结:

  • Activity, Service, BroadcastReceiver, ContentProvider的工作流程都离不开AMS,ApplicationThread,ActivityThread
  • ApplicationThread(Binder类型)是ActivityThread的内部类,ActivityThread持有ApplicationThread的实例
  • AMS也持有ApplicationThread实例(ActivityThread main方法调用attach传给AMS)
  • ApplicationThread是实现AMS和ActivityThread间的通信,实质上Binder机制通讯
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值