Android面试总结

最近一直在面试,总结一些常碰到的问题

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值