android面试题

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修饰的变量,常量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户画像

JS与Android IOS 交互

931
来自专栏青蛙要fly的专栏

项目需求讨论-Vlayout来快速构建及扩展复杂界面

大家好,今天又带来了项目中具体遇到的需求。做一个首界面,该首界面有很多功能块,同时这些功能块是动态的,因为登录的人的权限的不同,会显示不同的功能块,因为功能模块...

2112
来自专栏逍遥剑客的游戏开发

OGRE中用到的设计模式

2267
来自专栏Android知识点总结

1-SII--SharedPreferences完美封装

1334
来自专栏Flutter入门

Weex是如何在Android客户端上跑起来的

Weex可以通过自己设计的DSL,书写.we文件或者.vue文件来开发界面,整个页面书写分成了3段,template、style、script,借鉴了成熟的MV...

4275
来自专栏日常分享

Java 实现一个带提醒的定时器

定时闹钟预览版EXE下载链接:https://files.cnblogs.com/files/rekent/ReadytoRelax_jar.zip

2631
来自专栏battcn

Spring解密 - 默认标签的解析

紧跟上篇 Spring解密 - XML解析 与 Bean注册 ,我们接着往下分析源码

1011
来自专栏Java与Android技术栈

基于Kotlin的委托机制实现一个对Extra、SharedPreferences操作的库

本文介绍的库,github地址:https://github.com/fengzhizi715/SAF-Object-Delegate

1383
来自专栏恰童鞋骚年

ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init、加载Load以及呈现Render三个重要阶段,其中构造了页面控件...

1393
来自专栏Android Note

RecyclerView 刷新闪烁

3827

扫码关注云+社区

领取腾讯云代金券