[基础] 3. Android四大组件
2018-03-13 13:35
176 查看
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机制通讯
相关文章推荐
- 接触VC之四:COM组件模型基础
- React中文教程 - Component Basics(组件基础)
- 围观窗体与组件06 - 零基础入门学习Delphi30
- Angular基础(二) 组件的使用
- 【easyui】jQuery EasyUI Datagrid组件的完整的基础DOM结构
- 应用程序基础之02-应用程序组件篇(一)
- Akka(17): Stream:数据流基础组件-Source,Flow,Sink简介
- 【Android基础入门〖5〗】四大组件之BroadcastReceiver
- Vue.js 2.0 从基础到组件
- +++++++php组件、SQL基础知识
- Unity3d基础之组件 (Component) 和脚本 (Script) 的关系
- Android:基础认识(二)——四大应用组件
- 基础组件
- React.js 基础入门三 ---组件状态state
- 【android基础】Android中四大组件
- 软件架构训练基础教程之面向组件技术
- XAF 领域组件基础
- 安卓基础第七天(四大组件之BroadcastReceiver,样式主题,国际化,对话框)
- Android开发之旅:应用程序基础及组件(续)
- Android基础 Android四大基本组件介绍与生命周期