前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android面试题

android面试题

作者头像
ppjun
发布2018-09-05 11:53:49
5670
发布2018-09-05 11:53:49
举报
文章被收录于专栏:ppjun专栏

1. Activity和fragment的生命周期

  1. Activity从onCreate→onStart→onResume→onPause→onStop→onDestroy,其中oncreate初始化加载布局资源,onStart布局可见但是还在后台不可交互 onResume布局可见在前台可以交互。onPause正在停止当前activity,onStop表示activity即将停止,做一些回收资源操作,onDestroy销毁activity最终的资源释放。总结:onStart和onPause可见不可见,onResume和onStop可不可以交互
  2. Fragment从onAttach→onCreate→onCreateView→onStart→onResume→onPause→onStop→onDestroyView→onDestroy-onDetach ​

2. Layout_gravity和gravity的区别。

比如设置android:layout_gravity="right"的button会显示在父view的最右边。所以layout_gravity是设置当前view在父view的位置。

比如设置了android:gravity="left"的LinearLayout会让里面的子View最显示在最左边。所以gravity是设置当前view里面的子view的位置。

3. 当一个activity跳转到另一个activity的生命周期

我们分别用AB代替两个activity

onPause(A)→onCreate(B)→onStart(B)→onResume(B)→onStop(A)

4.简单介绍Handler Message MessageQueue Looper

当Handler调用sendMessage方法会先把调用MessageQueue.enqeueMessage把Message加到消息队列,然后Looper开启循环不断遍历消息队列,调用MessageQueue.next获取message,然后调用目标Handler的dispatchMessage,判断Message有没有Callback即有没有Runnable对象,再判断Handler有没有callback,如果都没最后输出到Handler的handleMessage方法来处理消息。

5. 内存溢出和内存泄露

oom又叫out of memory 就是内存溢出。就是对象需求的内存大于jvm可用内存,避免oom要

减小对象内存的使用

1)使用更加轻量的数据结构,使用ArrayMap/SparseArray代替HashMap

2)避免使用Enum

3)减小bitmap对象的内存占用 使用insampleSize缩放比例,设置decodeFormat,解码格式

4)使用更小的图片,用tinypng压缩图片

内存对象的重复使用。使用对象池

1)StringBuilder减少String对象创建

2)避免在onDraw创建对象,因为onDraw会频繁调用,频繁gc,从而造成内存抖动。

3)复用系统提供的资源,比如字符串 颜色 图片 动画 样式 和布局

4)在listview或者gridview对convertView的复用

5)bitmap对象的复用在api11-18使用inbitmap,确定具有相同的解码模式,第二张图片会使用第一张照片已存在的位置

避免内存泄露

1)注意Activity的泄漏,一般是内部类引用导致activity泄露比如handler

2)Activity Context被传到其他实例中,这可能导致自身引用发生泄漏

3)考虑使用Application Context 而不是Activity Context当然dialog就必须是activity的content

4)注意临时的bitmap对象的回收 调用bitmap.recycle()

5) 监听器的注销要手动unregister 比如realm的list监听器

6)注意缓存容器中的对象泄漏比如2.3版本的drawable会对view强引用,

7)注意webview的泄露

8)还有Cursor游标的关闭。

6. Jvm的堆栈方法区

堆区存放所有的对象,只有一个,每个对象都包含一个与之对应的class信息class的目的是得到操作指令,但是不包括基本类型和对象引用,new一个类就是对象引用。只存放对象本身。

栈区 每个线程都有一个栈区,用来存放对象的引用和基本类型,(怎么区分对象和对象的应用呢 举个例子 Person person=new Person(); =左边是对象的引用,=右边是对象),其他栈不能访问另外一个栈的内容

方法区,就是静态变量static修饰的变量,常量。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.04.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Activity和fragment的生命周期
  • 2. Layout_gravity和gravity的区别。
  • 3. 当一个activity跳转到另一个activity的生命周期
  • 4.简单介绍Handler Message MessageQueue Looper
  • 5. 内存溢出和内存泄露
    • 减小对象内存的使用
      • 内存对象的重复使用。使用对象池
        • 避免内存泄露
        • 6. Jvm的堆栈方法区
        相关产品与服务
        消息队列 CMQ
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档