【Android FrameWork】综合面试问题

本文主要探讨了Android Framework面试中的关键问题,包括跨进程传递大图片的策略、ThreadLocal的原理、Looper的工作机制、线程耗时任务检测、消息同步处理、Framework的设计模式及其巧妙之处。还涉及应用组件、消息通信、性能优化等相关话题,是Android架构师必备的知识点。
摘要由CSDN通过智能技术生成

1. 怎么跨进程传递大图片

考察点

  • 了解各种跨进程传输数据的方式及各自优缺点
  • 了解TransactionTooLargeException的触发原因和底层机制
  • 了解Bitmap传输底层原理

跨进程传大图有哪些方案

  • 给图片保存到固定的地方,传key值(路径)给对方
    • 问题:性能差,把图片写到文件需要耗时,对方读取文件也需要耗时
  • 通过IPC的方式转发图片数据
    • 不经过文件系统,但是需要多次拷贝

IPC方式传图

  • Binder:性能好,使用方便,但是大小有限制
  • Socket、管道:两次拷贝,也有大小限制
  • 共享内存:性能不错
  • 主要注意点
    • 1.性能,减少拷贝次数
    • 2.内存泄漏,资源及时关闭

TransactionTooLargeException

  • 发出去的或者返回的数据量太大
  • Binder缓存用于该进程所有正在进行中的Binder事务
    • 进程弃用binder机制会映射一块内存,大小是1M
    • 跨进程通信申请的缓冲区大小是不能超过1M的
    • 所有binder事务共享这1M内存空间,应该尽量避免同时跑多个事务,尤其是数据量很大的事务
  • 大数据量打碎分批发,或按需发(官方建议)

总结 跨进程传递大图片的方式

  • 图片写到文件,路径传到另一个进程,再读出来
  • intent传图,但是容易抛异常,原因是什么
  • binder调用传图,底层ashmem机制

2. ThreadLocal原理

关于更多面试题资料,可以前往 GitHub 自行查阅。

考察点

  • ThreadLocal的适用于什么场景?
  • ThreadLocal的使用方式是怎样的?
  • ThreadLocal的实现原理是怎样的?

ThreadLocal在FrameWork中的使用

  • Looper

     

  • Choreorgapher

原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值