面试之Android篇

1. Activity的启动模式

启动方式

  • standard(默认模式):创建新的Activity
  • singleTop:如果当前任务的顶部已存在该Activity的实例,则系统会调用该实例的onNewIntent()方法向其传送Intent,而不是创建Activity的新实例
  • singleTask:每次启动活动时系统会检查返回栈中是否存在该活动的实例,若存在,则把在这个活动之上的活动都出栈;若不存在,则创建新的任务和实例。
  • singleInstance:启动另一个返回栈来管理这个活动;在这种模式下,使用一个单独的返回栈来管理这个活动,不管是哪个程序来访问这个活动,都是共用同一个返回栈,解决了共享活动实例的问题。
    应用场景
  • standard:适合撰写邮件Activity或社交网络信息发布Activity。
  • singleTop:适合搜索功能,每次搜索查询都会引导至SearchActivity查看结果。
  • SingleTask:适合邮件客户端的收件箱等,因为它只需要保持一个实例即可。
  • SingleInstance:适合多个应用共享一个活动实例的情况
2. Android中的异步机制
  • 总体来说,其异步机制由Looper、Handler和MessageQueue三者组成
  • 具体来说Android提供了HandlerThread(含有Looper的线程),以及使用其实现的IntentService(轻量级Service异步服务)和AsyncQueryHandler(提供ContentProvider使用)
  • 以及AsyncTask实现异步耗时任务
3.ListView的优化
  • 重用convertView:用以避免重复创建view,重复创建view代价比较大,而且如果重用view不改变宽高,重用view可以减少重新分配缓存造成的内存频繁分配/回收。RecycleBin机制
  • 避免在getview中有重复调用findviewById:findviewById的实现是遍历,如果定义的view越复杂代价越大。推荐采用ViewHolder,然后保存在view的tag中。
  • 设置view数据之前先对比数据是否有改变:一般来说,【比较两个数据的代价】远小于【View的重绘制的代价】。
  • 避免在getview中直接加载Image或做耗时操作:用户在快速滑动列表时,会大量调用getview,而getview是在主线程中被调用的。推荐异步加载图片。
  • ListView中元素尽量避免半透明:因为半透明绘制需要大量乘法计算。
  • 尽量开启硬件加速。
4. 多进程通信
5. Crash与OOM
6. 重定向

Android 中重定向解决方法:

Client request:
GET /index.html HTTP/1.1
Host: www.example.com

Server response:
HTTP/1.1 302 Found
Location: http://www.redirected-address.example.com

如上为重定向返回的结果,我们可以通过getHeaderField("Location")来获取到新的URL,然后再去查找结果。

7. https具体传输流程
8. ANR
9. Android热修复和插件化
  • 插件化
  • 热修复
10. Service不被kill的解决方案
11. StartActivityForResult失效
  • 失效原因
  • 解决方法
12. Android中为什么主线程不会因为Looper.loop()里的死循环卡死
13. Fragment
  • fragment的使用
  • fragment的通信

第三方框架

1. EventBus
  • EventBus的使用
  • EventBus源码分析
  • 消息通信方式对比

你可能感兴趣的:(面试之Android篇)