"Android面试核心知识点解析"
Android面试中,Activity是不可或缺的话题,因为它构成了应用程序的主要交互界面。以下是对Activity的详细讲解,以及与其相关的面试重点:
1. **Activity的生命周期**
- `onCreate()`:Activity首次创建时调用,用于初始化UI和数据。
- `onStart()`:Activity变得对用户可见,但不一定是焦点,资源开始消耗。
- `onResume()`:Activity完全可见,用户可以与之交互,此时是活动状态。
- `onPause()`:当另一个Activity进入前台或部分屏幕被覆盖时调用,不应执行长时间操作。
- `onStop()`:当Activity完全不可见时调用,通常在内存紧张时,系统可能会销毁该Activity。
- `onDestroy()`:Activity即将被销毁,清理资源的最后机会。
2. **Activity的窗口属性设定**
- AndroidManifest.xml中的配置,如主题、权限、启动模式等。
- 主题(Theme):通过<style>定义,影响Activity的整体视觉效果。
- 启动模式(Launch Mode):单实例(singleInstance)、单任务(singleTask)、单栈顶(singleTop)、标准模式(standard),影响Activity如何启动和存在。
3. **数据保存与恢复:onSaveInstanceState()**
- 当Activity被暂停或销毁,且可能不会被恢复时,系统会调用此方法,允许开发者保存关键数据到Bundle。
- Bundle对象在onCreate()或onRestoreInstanceState()中使用,以恢复之前的状态。
- 注意,这并不保证Activity一定会被恢复,因此不应用于持久化数据。
4. **Intent:通信使者**
- Intent是Android系统中组件间通信的主要方式,用于启动Activity或Service。
- Intent可以携带数据,用于传递信息,如启动新Activity的参数。
- 表达动作(ACTION)、数据(DATA)、类别(CATEGORY)等,实现灵活的组件调用。
5. **Activity的栈管理**
- Android使用任务(Task)和栈(BackStack)管理Activity,遵循“后进先出”原则。
- BackStack中的Activity可以通过`finish()`方法移除,或者系统在内存不足时自动回收。
- 使用FLAG_ACTIVITY_CLEAR_TOP或FLAG_ACTIVITY_SINGLE_TOP可以调整栈中的Activity状态。
6. **进程和内存管理**
- Android系统会根据内存状况决定是否杀死Activity。优先级:前台进程 > 可见进程 > 服务进程 > 后台进程 > 垃圾回收。
- 当内存紧张时,非前台的Activity可能被回收,因此应合理管理内存,避免不必要的内存泄漏。
7. **横竖屏切换**
- 默认情况下,屏幕旋转会导致Activity重建,需在Manifest中设置`android:configChanges="orientation|screenSize"`来处理。
- 处理配置变更时,可以选择重写`onConfigurationChanged()`,避免Activity被销毁和重建。
8. **多Activity应用设计**
- 考虑Activity之间的关系和导航路径,合理规划Activity层次结构。
- 使用Fragment进行界面复用和更好地管理屏幕空间,尤其在平板和大屏设备上。
9. **异常处理和崩溃日志**
- 应用应处理常见的异常,如空指针异常、类型转换异常等,确保程序稳定性。
- 使用`Thread.setDefaultUncaughtExceptionHandler()`捕获未被捕获的异常,并记录崩溃日志,便于调试。
10. **权限管理**
- 针对Android 6.0及以上版本,需动态申请权限,考虑运行时权限对用户体验的影响。
- 使用`shouldShowRequestPermissionRationale()`判断用户是否已拒绝过权限请求。
理解并掌握这些知识点对于Android开发者来说至关重要,不仅能提升应用程序的质量,也是面试时展示专业技能的关键。在准备面试时,不仅要熟悉理论知识,还要通过实际项目经验来加深理解。