Android面试总结

原创 2016年05月30日 10:16:03
最近一直在面试,总结一些常碰到的问题

1. 四大组件

1)Activity
            生命周期:onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()
            启动方式:
                    a.Stardard 同个任务栈新建不同实例
                    b.SingleTop 若当前实例处于栈顶,则直接调用;否则,新建实例
                    c.SingleTask 相同栈内多实例,实例唯一
                    d.SingleInstance 每个任务栈中只有一个实例


2)Service
    启动方法:
        a.StartService
            生命周期:onCreate()->onStart()->onDestory()
            不管启动多少次,onCreate()只调用一次
        b.BindService
            生命周期:onCreate()->onBind()->onUnbind()->onDestory()
            屏幕旋转时,Service重新启动,重新走一遍上述生命周期
3)BroadcastReciver
    注册方式,区别

2. Listview优化方案

     1)复用ConvertView:判断ConvertView是否为NULL,若为NULL,则新建;否则,直接引用
     2)给ConvertView设置TAG,传入ViewHolder对象,用于缓存数据,达到图像数据异步加载的效果
     3)数据量大的情况下,实现分页加载(如何分页,如何判断到页底:position等于数据集大小)
     4)有图片加载则压缩图片

3. Handler机制

 a.Handler发送Msg,Looper对象从消息队列(Message Queue)读取Msg对象进行处理,并把Msg交给Handler,Handler读取并进行UI更新
 b.非主线程创建Handler,需要加Looper.prepare()

4. 自定义控件步骤

1)自定义属性,attr.xml
2)在View的构造方法中获得自定义属性
3)测量onMesure()
4)布局onLayout(ViewGroup)
5)绘制onDarw(Canvas的使用)
6)交互动作onTouchEvent
7)onInterceptTouchEvent(ViewGroup)

onMeasure中:
    MeasureSpec的specMode:
    1)EXACTLY:MATCH_PARENT使用
    2)AT_MOST:WART_CONTENT使用
    3)UNSPECIFIED
    测量完毕后使用setMeasuredDimension

5. 内存泄露的原因

1)资源对象未关闭(Cursor,File等)
2)构建Adapter没有使用ConvertView
3)Bitmap未使用时没释放(使用bm.recycle)
4)使用application的context代替activity的context,避免activity的context在自己范围外使用,导致activity无法释放
5)广播注册没取消
6)Hanler应声明为静态对象,并在其内部类中保存一个对外部类的弱引用

弱引用:不论内存空间是否不足,都会回收内存
软引用:内存空间不足时,回收内存;否则,不回收

6. 解决OOM常用方案

 1)缓存图像到内存,采用软引用缓存到内存,而不是每次使用的时候重新加载到内存
 2)调整图像大小,做压缩处理
 3)及时回收图像(bm.recycle)
 4)自定义堆内存分配大小,优化Dalvik虚拟机堆内存分配

7. 图片压缩(按比例压缩)

 1)读入图片,把BitmapFactory.Options.inJustDescodeBounds赋值TRUE,使得Bitmap通过路径获得图片信息但不占内存
 2)根据option.outWidth和outHeight获取长高
 3)设inSampleSize缩放比例,调节decode原图的所需的内存
 4)重新读入图片decodeFile

8. ANR如何避免

1)运行在主线程里的任何方法都尽可能少做事情
2)避免在BroadcastRecever中做耗时操作,若有耗时工作,应在Recevier中启动Service
3)使用notification Manager,避免在Intent Recevier里启动Acitivity

9. 对象序列化

1.Parcelable:Android独有,更高效,但是需要实现部分方法
2.Serializable:jre普遍所有,兼容性更好,但是效率较低
3.参考:http://my.oschina.net/u/242041/blog/206997
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android事件分发机制总结

理解事件的分发机制,需要对View和ViewGroup事件的分发分别探讨。View和ViewGroup的区别,一个View控件是指它里面不能再包含子控件了,常见的如TextView、Button、Im...
  • shakespeare001
  • shakespeare001
  • 2016年03月27日 20:59
  • 1722

Android 面试题总结之Android 进阶(一)

Android 面试题总结之Android 进阶(一) 在前几篇文章中都是讲的基础,大家应该会觉得非常熟悉,但往往我们可能对于基础某些细节认识不够彻底或贯穿不全,我一直认为基础都是比较难的,那么本...
  • vfush
  • vfush
  • 2016年06月08日 16:26
  • 14915

Android面试总结(不定时更新版)

前言因为个人原因想换个公司,所以最近一直忙着交接工作和准备面试,可能准备得比较充分面了几家都过了,然后进了第一家,一直想写个文章记录下面试的事情,所以每次面试完我就在笔记本上记录了面试的问题,然后断断...
  • lxzmmd
  • lxzmmd
  • 2016年06月12日 16:10
  • 2525

Android技术总结+面试题

  • 2011年07月10日 10:36
  • 126KB
  • 下载

Android精简面试总结

  • 2015年10月17日 10:57
  • 567KB
  • 下载

android面试题,笔试题汇总总结(最全)

  • 2016年04月05日 16:36
  • 101KB
  • 下载

J哥---------北京Android各招聘公司面试实战总结

From: 再三考虑,决定把今天的面试总结一下,算是对自己的总结,如果能顺便给正在找工作的朋友有所帮助,那就不能再好了。 ps: 今天面试真的好累, 昨晚没睡好,今天早上起床 也没有吃早饭...
  • qq_27073205
  • qq_27073205
  • 2015年05月26日 21:04
  • 765

J哥---------北京Android各招聘公司面试实战总结

From: 再三考虑,决定把今天的面试总结一下,算是对自己的总结,如果能顺便给正在找工作的朋友有所帮助,那就不能再好了。 ps: 今天面试真的好累, 昨晚没睡好,今天早上起床 也没有吃早饭...
  • wyb112233
  • wyb112233
  • 2015年07月31日 15:22
  • 1317

Android实习生首次面试总结

面试经历
  • jklkaljdkl
  • jklkaljdkl
  • 2017年05月10日 14:07
  • 1108

Android面试总结2017版

近期我司招聘,我去面了一些android开发的哥们,以下由近期面试总结得出的体会,以技术面试60分钟为基准,根据我去面试和面试别人的经验,我把整个面试流程大概规划为以下几个部分: 1. 10%的时间去...
  • u014222765
  • u014222765
  • 2017年12月28日 20:03
  • 32
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android面试总结
举报原因:
原因补充:

(最多只允许输入30个字)