![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CM2MjY5UzNhFWNygzNwIWZkFjYxIzY4gDO3kTOlJDMx8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一.四大组件是什么
Android 四大组件是Activity、Service、BroadcastReceive、ContentProvider
Activity直接与用户交互的组件
周期:onCreate=>onStart=>onResume=>onPaused=>onStop=>onDestroy
启动模式: standard、singleTop、singleTask、singleInstance
1. 横竖屏切换生命周期不重启 设置android:configChanges
2.数据恢复
onSaveInstanceState-->onStop-->
onStart-->onRestoreInstanceState-->
Service服务是运行在后台的组件,无需与用户进行交互
启动方式:
1.StartService: onCreate=>onStartCommand=>onDestroy
启动它的组件无关联,销毁需调用stopSelf或stopService
2.bindService: onCreate=>onBind=>onUnbind=>onDestroy
与启动组件绑定,所有绑定组件销毁后执行完unBind才会销毁
注:它本身还运行在主线程中,所以耗时逻辑仍需工作线程去完成
BroadcastReceive广播用来在应用程序之间传播信息的机制
动态注册:registerReceive 注册组件销毁后,广播失效 unRegisterReceiver解除
静态注册:manifest中注册 安装时就会被系统解析一直起作用
普通广播
通过Context.sendBroadcast()方法来发送。它是完全异步的,所有的receivers接收器的执行顺序不确定 这种方式效率更高
有序广播
通过Context.sendOrderedBroadcast来发送。所有的receiver依次执行,使用android:priority属性设置优先级,优先级高的先收到该广播并且可以丢弃该广播,使该广播不再往下发送
ContentProvider为应用提供数据共享,不用关注储存方式
ContentProvider(内容提供者)
ContentResolver(内容解析者)
ContentObserver(内容观察者)
1、创建自己的数据列表;
2、自定义ContentProvider实现相关的抽象方法;
3、在AndroidManifest中声明provider以及定义相关访问权限;
4 、通过ContentResolver根据URI进行增删改查;
二.Activity之间的通信方式
1.Intent 2.借助静态数据实现 3.借助全局变量来实现/Application 4.通过Service 5.借助外部存储a.SharedPreference SharedPreference是存放在data/data/应用包名/shared_prefs目录下后缀为.xml的文件
b.SQLite SQLite是存放在data/data/应用包名/databases目录下的后缀为.db3的文件
c.File
三.Activity各种情况下的生命周期
正常正常启动: onCreate=>onStart=>onResume
返回键退出:onPause=>onStop=>onDestroy
按home键正常启动: onCreate=>onStart=>onResume
按home: onPause=>onStop
正常启动: onRestart=>onStart=>onResume
横竖屏切换正常启动: onCreate=>onStart=>onResume
横竖屏切换:onPause=>onStop=>onDestroy=>onCreate=>onStart=>onResume
设置configChanges正常启动: onCreate=>onStart=>onResume
横竖屏切换:onConfigurationChanged