Android 四大组件面试
前言
仅用于知识点简介,详细描述建议百度,主要是一些个人的理解总结,可以在面试时来回答,所以并不是很详细,只是总结~ 后续应该会不断更新
Activity、Service、BroatcastReceiver、ContentProvider
1. Activity
活动页面
- 生命周期:
- onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy()
- Activity 跳转时:A -> B,A onPause() -> B onCreate() -> B onStart() -> B onResume() -> B onStop(),最后一步 A onStop 如果 B 是半透明即 A 依然可见,那么就不会调用
- 四个状态:
1. running->当前显示在屏幕的activity(位于任务栈的顶部),用户可见状态。
2. poused->依旧在用户可见状态,但是界面焦点已经失去,此Activity无法与用户进行交互。
3. stopped->用户看不到当前界面,也无法与用户进行交互 完全被覆盖.
4. killed->当前界面被销毁,等待这系统被回收
- Activity 间传递数据
- Intent 传值
- 静态变量
- SP、ContentProvider
- 广播
- 外部存储File
- SQLite
- Activity 状态的暂存与恢复
- 一般会自动保存
- 内存不足时,可以在onSaveInstanceState() 保存信息到 Bundle
- 横竖屏切换
- 如果不设置 android:configChanges,则会根据生命周期重新构建
- 设置的话则会调用 onConfigurationChanged()
- 启动模式
- standard:每启动一个Activity就会在栈顶创建一个新的实例
- singleTop:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例
- singleTask:使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在则直接复用,并把当前Activity之上所有实例全部出栈
- singleInstance:该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该势力在整个系统中只有一个。无论从那个任务栈中启动该Activity,都会使该 Activity 所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个Activity
2. Service
服务
- startService
- 用于启动一个服务执行后台任务,不与组件进行通信
- 停止服务使用stopService。
- 启动后便可以在后台无限的运行下去(除非系统杀死回收)
- 生命周期:onCreate、onStartCommand、onDestroy
2. bindService:
- 用于启动的服务需要进行通信。
- 停止服务使用unbindService
- 多个组件可以同时与服务绑定,但是当他们全部都解除绑定时,服务就会销毁。
- 生命周期:onCreate、onBind、onUnbind、onDestroy
3. Broadcast Receive
广播是一种广泛运用的在应用程序之间传输信息的机制。而广播接收器是对发送出来的广播进行过滤接受并响应的一类组件
- 注册
- AndroidManifest.xml中注册;
- 在运行时的代码中使用Context.registerReceive()进行注册。
2. 类型
- 普通广播:sendBroadcast,接收顺序随机,接收器不能处理,不能拦截
- 系统广播:手机的基本操作(短信拍照等),有特定的 Intent-Filter和Action
- 有序广播:根据级别确定接收顺序,同级别随机。优先级高的可以修改,可以拦截
- 粘性广播
3. 耗时的操作放在服务中,否则容易被杀死
4. Content Provider
使一个应用程序的指定数据集提供给其他应用程序