博客
关于我
Android 面试题(二)Android基础篇
阅读量:638 次
发布时间:2019-03-14

本文共 3157 字,大约阅读时间需要 10 分钟。

Android基础篇

APP启动方式

点击应用图标后,系统会启动LauncherActivity。如果这个进程已存在,系统会直接重启该进程;如果进程不存在,就会通知Zygote进程通过Socket fork新进程,之后会通过 Binder 机制通知新进程创建完成。整个流程属于Activity的启动流程。

Activity启动模式

Android提供了四种Activity启动模式,根据需要选择合适的模式:

  • 标准模式 (standard)

    默认模式,无需手动配置,默认创建新实例,允许多个实例并叠加运行。

  • 单实例 (singleTop)

    允许多个实例,但不支持重叠启动。同一应用启动该Activity时,会调用onNewIntent方法而不是创建新实例。

  • 单栈单实例 (singleTask)

    一个实例只能在应用程序的栈中运行。如果在其它任务中启动该Activity时,会销毁栈中其他Activity,仅将该Activity的onNewIntent调用的情况下的新任务。

  • 独立实例 (singleInstance)

    在同一个应用程序中只能运行一个实例,并且这个实例独立运行在一个任务中,不允许其他Activity存在。

  • 横竖屏切换

    横竖屏切换会根据Android版本不同触发不同的生命周期:

  • 未设置Activity配置

    切屏时会多次调用生命周期,横屏切换一次,竖屏切换两次,具体流程如下:

    • onSaveInstanceState
    • onPause
    • onStop
    • onDestroy
    • onCreate
    • onStart
    • onRestoreInstanceState
    • onResume
  • 设置orientation配置

    切屏仍会调用完整生命周期,但切屏时仅一次调用:

    • onSaveInstanceState
    • onPause
    • onStop
    • onDestroy
    • onCreate
    • onStart
    • onRestoreInstanceState
    • onResume
  • 设置orientation|keyboardHidden配置

    切屏只会调用onConfigurationChanged方法。

  • PathClassLoader与DexClassLoader

    PathClassLoader与DexClassLoader的主要区别在于类文件的查找路径:

  • PathClassLoader

    只能加载系统中安装的APK文件,只能在data/data目录下的文件。

  • DexClassLoader

    支持加载任意路径下的 dex、jar、apk、zip 文件,可以用于自定义类加载场景。

  • Intent传递数据大小

    Intent在Android中默认支持1MB的数据大小。如果需要传递大数据量,可以通过以下方式解决:

  • 进程内:采用EventBus或文件缓存等方式。
  • 进程间:通过ContentProvider进行进程间数据共享和传递。
  • 注意:不要直接通过Intent传递大数据,否则可能导致OOM。

    Context相关类

    Context在Android中的实现和包装:

  • Context抽象类

    提供与资源、注解等操作相关的API。

  • ContextImpl

    Context的实际实现类。

  • ContextWrapper

    包装类,内部使用ContextImpl实现。Activity、Service等组件间接或直接继承自ContextWrapper。

  • IntentService与Service

    IntentService和Service的主要区别:

  • Service

    不是独立的进程,依赖主线程执行。如果在Service中执行长时间逻辑或操作,可能导致ANR。

  • IntentService

    IntentService是Service的子类,创建时会启动一个内部线程执行耗时操作。通过Handler实现多线程管理,不会引起ANR。

  • Service启动方式

    Service的启动方式及其区别:

  • startService

    onCreate → onStartCommand → onDestroy。服务与启动者的销毁无关,除非主动调用停止方法。

  • bindService

    onCreate → onBind → onDestroy。服务与启动者相互依赖,启动者销毁则服务也会销毁。

  • 结合startService和bindService

    可以避免服务因主进程销毁而被销毁。

  • BroadcastReceiver类型

    Android中的 BroadcastReceiver类型有三种:

  • 有序广播 (OrderedBroadcastReceiver)

    广播接收器按照优先级接收广播,可终止广播和修改数据。

  • 无序广播 (BroadcastReceiver)

    广播接收器不会接收到发送后续广播的数据,无法终止和修改。

  • 粘性广播 (stickyBroadcast)

    广播会被长时间保留,并传递给新的收件人。通过sendStickyBroadcast发送。

  • 进程类型与线程

    进程与线程在Android中的区别和作用:

  • 进程

    资源管理的基本单位,对CPU、内存等资源拥有完整控制。

  • 线程

    计算机执行的基本单位,占用资源更轻薄,调度更灵活。每个线程在进程中独立运行。

  • 线程是进程控制的核心,进程管理资源,线程负责具体执行指令。

    线程亦分为用户级和内核级,前者需绑定内核级线程,用户级线程无法保证执行顺序。

    Thread与进程间通信

    Thread在Android中的应用:

  • 主要方式
    默认线程由Thread.start()启动,内部调度方式因系统而异。
  • 线程间通信
    通过共享内存、Pipe、 Monsanto机制实现。常通过Runable实现异步执行。
  • 进程间通信

    进程间的高效通信方式:

  • Bundle

    通过Intent携带数据传递,适合简单数据。

  • ContentProvider

    多个应用间共享数据,便于管理,兼顾数据安全。

  • AIDL

    定义接口,实现远程服务调用,便于复杂场景。

  • BroadCast

    系统广播或自定义广播,可传递简单信息。

  • Socket

    通过网络方式实现跨进程通信,适合大型数据传输。

  • 进程保活

    提高进程稳定性的关键措施:

  • 优化进程组

    提升进程优先级,降低被杀死的风险。

  • 进程拉活

    采用广播机制,如开机广播或锁屏广播。

  • 优化资源管理

    合理使用资源,减少内存泄漏。

  • 序列化与反序列化

    序列化与反序列化的具体操作内容:

    序列化(Serialize)将数据转为二进制流,反序列化则将其还原为原数据结构。

    主要方法包括:

  • ** Serializable**

    基于Java的默认序列化机制,效率较低,适合存储磁盘等介质。

  • Parcelable

    Android自定义的序列化机制,效率更高,适合对象间传递。

  • Dex问题与解决方案

    解决65536(64k)的类、方法索引问题,避免Dex文件溢出:

  • 问题根源

    使用short存储类、方法索引,超过范围会导致溢出。

  • 解决方案

    使用Multidex,通过多dex文件实现类、方法存储的扩展。

  • anim标记

    提供三种主要动画效果:

  • 帧动画 (FrameAnimation)

    按帧播放图片序列,合成动画效果。

  • 补间动画 (Tween Animation)

    通过属性变换实现动画效果,常见属性包括scale、alpha、Translate、Rotate。

  • 属性动画 (Property Animation)

    持续修改View属性,实现动画效果。

  • 通过属性动画可以真实地改变View属性,带来更生动的效果。

    synopsis

    以上内容涵盖了Android基础组件的核心知识点,详细解析了关键技术原理和应用场景,适合初级开发者和技术爱好者深入学习和实践。

    转载地址:http://hwilz.baihongyu.com/

    你可能感兴趣的文章
    mysql 索引
    查看>>
    MySQL 索引失效的 15 种场景!
    查看>>
    MySQL 索引深入解析及优化策略
    查看>>
    MySQL 索引的面试题总结
    查看>>
    mysql 索引类型以及创建
    查看>>
    MySQL 索引连环问题,你能答对几个?
    查看>>
    Mysql 索引问题集锦
    查看>>
    Mysql 纵表转换为横表
    查看>>
    mysql 编译安装 window篇
    查看>>
    mysql 网络目录_联机目录数据库
    查看>>
    MySQL 聚簇索引&&二级索引&&辅助索引
    查看>>
    Mysql 脏页 脏读 脏数据
    查看>>
    mysql 自增id和UUID做主键性能分析,及最优方案
    查看>>
    Mysql 自定义函数
    查看>>
    mysql 行转列 列转行
    查看>>
    Mysql 表分区
    查看>>
    mysql 表的操作
    查看>>
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>