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技术总结+面试题

  • 2011-07-10 10:36
  • 126KB
  • 下载

Android精简面试总结

  • 2015-10-17 10:57
  • 567KB
  • 下载

Android面试基础知识总结

Android基础知识总结

Android面试总结

  • 2014-09-06 09:39
  • 19KB
  • 下载

2017年深信服Android开发岗位笔试面试总结

笔试结构体、联合体、正则表达式、后缀表达式 堆排序、霍夫曼树、链表的冒泡排序、字符串匹配、图的搜索 笔试题目比较多,难度也比较大,总分100分,但是应该只需要考到30分就可以通过笔试。

Android面试经典总结

  • 2015-01-06 17:48
  • 295KB
  • 下载

Android面试总结持续更新中

Android面试总结以下是自己在面试过程中经常遇到的一些面试问题,特总结一下高频会问到的: Handler机制,这个问题问的频率是非常的高 App内存优化 App内存泄露,你常用的内存泄露检测工具,...

android 面试知识总结

Java知识点包括:接口与抽象的使用及区别,多线程,socket基础,集合类,也有个别公司考察定义,很无语. C/C++知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的遍历或图的遍历....

Android面试总结

什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity setContentView() ,// 要显示的布局 , activity 是Context的子类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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