来自  资质荣誉 2019-09-18 14:48 的文章
当前位置: 澳门太阳娱乐手机登录 > 资质荣誉 > 正文

Android面试知识

1.Activity 生命周期
  • onCreate:创建,初始化
  • onStart:Activity正在起步,此时已处在可知状态,但是并未有在前台展现;即Activity已显得,然则无法看见
  • onResume:Activity已在前台可知,可与客户交互
  • onPause:Activity正在停止;onPause方法推行到位后,新Activity的onResume方法才会被施行
  • onStop:Activity不可见,再后台
  • onRestart:Activity由不可知变为可知时,调用
  • onDestroy:销毁Activity

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.Activity A 运营Activity B 各自生命周期
  • 1.A onCreate
  • 2.A onStart
  • 3.A onResume
  • 4.A onPause
  • 5.B onCreate
  • 6.B onStart
  • 7.B onResume
  • 8.A onStop

此刻点击再次回到,各自生命周期:

  • B onPause
  • A onRestart
  • A onStart
  • A onResume
  • B onStop
  • B onDestroy

2. Layout_gravity和gravity的区别。

比如说设置android:layout_gravity="right"的button会展现在父view的最侧面。所以layout_gravity是设置当前view在父view的地点。

比如设置了android:gravity="left"的LinearLayout会让当中的子View最呈现在最左侧。所以gravity是安装当前view里面包车型地铁子view的岗位。

3.Activity A 运转Activity B 各自生命周期(A未有被B完全覆盖)
  • A onPause
  • B onCreate
  • B onStart
  • B onResume

点击重临:

  • B onPause
  • A onResume
  • B onStop
  • B onDestroy

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

大家独家用AB替代三个activity

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

4.Fragment 生命周期
  • onAttach :fragment关联到activity,这一年activity已经传进来,能够收获Activity传来的值
  • onCreate :创建fragment
  • onCreateView :加载Fragment布局,尽量不要写耗费时间操作,越快越好
  • onActivityCreated :当Activity中的onCreate方法实践完后调用,在onActivityCreate()调用在此以前,activity的onCreate还向来不实现,所以不可能在onCreateView中打开与Activity有相互的UI操作,UI交互操作能够投身onActivityCreated里开展
  • onStart :Fragment可见
  • onResume :Fragment进入前台,可获得关节时激活
  • onPause :客商距离这些Fragment
  • onStop :Fragment不可见
  • onDestroyView :Fragment中布局被移除,销毁相关联的UI布局,清除全体和视图相关的财富
  • onDestroy :销毁Fragment对象
  • onDetach :Fragment 和Activity解除关系

4.大约介绍Handler Message MessageQueue Looper

当Handler调用sendMessage方法会先把调用MessageQueue.enqeueMessage把Message加到音讯队列,然后Looper开启循环不断遍历音信队列,调用MessageQueue.next获取message,然后调用目的Handler的dispatchMessage,判别Message有未有Callback即有未有Runnable对象,再决断Handler有未有callback,倘诺都没最终输出到Handler的handleMessage方法来拍卖音讯。

5.Fragment add 和replace 的区别

Fragment显示的二种方法:

  • replace :会调用Fragment的生命周期,也正是说它会销毁视图,重新加载
  • add hide :正是显得遮盖Fragment,会走onHiddenChanged 方法

5. 内部存款和储蓄器溢出和内部存储器走漏

oom又叫out of memory 正是内存溢出。正是指标要求的内部存款和储蓄器大于jvm可用内部存款和储蓄器,幸免oom要

6.Activity开发银行方式
  • standard:私下认可运转情势,即标准方式;每一次运转一个Activity都会重写创立二个新的实例;
  • singleTop:栈顶复用形式;纵然新的Activity已经放在栈顶,那么这几个Activity不会被再次创立,同期它的onNewIntent方法调用;standard和singleTop运行形式都以在原职分栈中新建Activity实例,不会运维新的task
  • singleTask:栈内复用格局;假诺栈中存在这么些Activity的实例就能够复用那几个Activity,不管它是还是不是位于栈顶,复用时会将它上边的Activity全部出栈,何况会回调该实例的onNewIntent
  • singleInstance:全局独一格局;该情势抱有singleTask全数特性,分裂是,这种形式下Activity会单独占用叁个Task栈,具备全局独一性

压缩对象内部存款和储蓄器的使用

1)使用进一步轻量的数据结构,使用ArrayMap/SparseArray替代HashMap

2)防止接纳Enum

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

4)使用越来越小的图纸,用tinypng压缩图片

7.强引用、软引用、弱引用
  • 强援引:内部存款和储蓄器不足,也不会回收
  • 软引用(SoftReference):假若内部存款和储蓄器不足,会回收
  • 弱引用(WeakReference):JVM实行垃圾回收时,不管是或不是内部存款和储蓄器不足,都会回收
  • 虚引用(PhantoReference):必需和征引队列关联应用

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

1)StringBuilder裁减String对象创设

2)制止在onDraw创造对象,因为onDraw会频仍调用,频仍gc,进而产生内部存款和储蓄器抖动。

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

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

5)bitmap对象的复用在api11-18使用inbitmap,鲜明具备同样的解码方式,第二张图纸会使用第一张相片已存在的岗位

8.瑟维斯 起头格局
  • startService():
    • 生命周期:onCreate-->onStartCommand-->onDestory
    • 假若服务已运维,则不会再度实行onCreate,而是会调用onStart和onStartCommand
    • 一经服务开启,和开启者就一直不其他涉及;开启者不可能调用服务里的秘技
  • bindService():
    • 生命周期:onCreate-->onBind-->onUnBind-->onDestroy
    • 绑定服务不会调用onStart大概onStartCommand
    • bind格局展开服务,绑定服务,固然绑定者挂掉,服务也会跟着挂掉;绑定者能够调用服务内部的主意

幸免内部存款和储蓄器败露

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游标的关门。

9.View绘制流程
  • measure:从顶层父view向子view递归调用view.measure
  • layout
  • draw

6. Jvm的酒馆方法区

堆区寄放全数的对象,独有五个,每一种对象都饱含八个与之相应的class新闻class的指标是收获操作指令,可是不满含宗旨类型和对象引用,new三个类正是目的引用。只存放对象自己。

栈区 每一种线程都有多少个栈区,用来存放在对象的引用和主导项目,(怎么分裂对象和对象的行使呢 例如 Person person=new Person(); =左边是目的的援用,=侧面是目的),别的栈不可能访问别的二个栈的原委

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

10.Touch风云传递机制
  • dispatchTouchEvent:分发event
  • onInterceptTouch伊夫nt:拦截event;再次来到true表示拦截,事件将适可而止向下传递
  • onTouchEvent:管理event;再次来到true表示管理该事件,事件将终止向上传递
11.两种动画
  • FrameAnimation:逐帧动画;将多张图片组合起来播放
  • TweenAnimation:补间动画;对有个别view举行一多种动画,如淡入淡出,缩放,平移(Translate),旋转
  • PropertyAnimation:属性动画;对目的对象开展赋值并修改其品质来落实动画
12.Handler,Looper,Message

  • Looper.prepare()在本线程中保留三个Looper实例,然后该实例中保存多个MessageQueue对象;Looper.prepare()在叁个线程中不得不调用壹遍,所以MessageQueue在二个线程中只会存在四个;
  • Looper.loop()会让近来线程步入一个有线循环,不断从MessageQueue的实例中读取音信,然后回调msg.target.dispatchMessage方法;
  • Handler的构造方法,会率先获得当前线程中保存的Looper实例,然后与Looper实例中的MessageQueue相关联;
  • Handler的SendMessage方法,会给msg的target赋值为handler本身,然后到场MessageQueue;
  • 在布局Handler实例时,我们会重写handlerMessage方法,也正是msg.target.dispatchMessage最终调用的章程;
  • Activity运行时,会在现阶段UI线程调用Looper.prepare()和Looper.loop().

本文由澳门太阳娱乐手机登录发布于 资质荣誉,转载请注明出处:Android面试知识

关键词:

热门文章