美文网首页
面试之Android篇

面试之Android篇

作者: 大海孤了岛 | 来源:发表于2017-09-02 15:29 被阅读15次
    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

    第三方框架

    1. EventBus

    相关文章

      网友评论

          本文标题:面试之Android篇

          本文链接:https://www.haomeiwen.com/subject/atcljxtx.html