美文网首页程序员的职业规划
高级安卓开发面试题详解

高级安卓开发面试题详解

作者: NewSalton | 来源:发表于2019-03-23 08:09 被阅读76次

高级安卓开发面试题详解

网上遍布各种各样的面试题,亦或只有题目,亦或答案不齐全,尽个人所能将尽可能整理。

1. 如何理解volatile?

被volatile修饰的变量,JVM会把该线程对应的本地内存中的共享变量刷新到主内存中。被修饰变量对所有线程可见、有序、原子

参考:
Android并发编程之图文解析volatile关键字

2.什么是ANR 如何避免它?

  • Application Not Responding。程序响应由AM和WM来监控,出现以下情况会提示ANR:
    1. 5秒内没有响应输入内容
    2. 广播10秒内没有执行完毕
    3. Service在20秒内没有处理完毕
  • ANR发生的时候会在logcat打印错误信息,可获取到ANR类型、CPU使用情况、IOWait
    。除了log输出外,你会发现各个应用进程和系统进程的函数堆栈信息都输出到了一个/data/anr/traces.txt的文件
  • 避免主线程上执行复杂耗时操作,比如收发网络数据、大量计算、操作数据库、读写文件等;广播和service要注意处理时常,如果有耗时操作放到线程中。

3.Activity的启动模式

1. standard标准模式:

每当我们启动一个Activity,系统就会相应的创建一个实例,不管这个实例是否已经存在。这种模式,一个栈中可以有多个实例,每个实例也都有自己的任务栈。而且是谁启动了此Activity,那么这个Activity就运行在启动它的Activity所在的栈中。

2. singleTop栈顶复用模式:

如果要启动的Activity已经处于栈的顶部,那么此时系统不会创建新的实例,而是直接打开此页面,同时它的onNewIntent()方法会被执行,我们可以通过Intent进行传值,而且它的onCreate(),onStart()方法不会被调用,因为它并没有发生任何变化。
归纳为以下三点:

  • 当前栈中已有该Activity的实例并且该实例位于栈顶时,不会创建实例,而是复用栈顶的实例,并且会将Intent对象传入,回调onNewInten()方法;

  • 当前栈中已有该Activity的实例但是该实例不在栈顶时,其行为和standard启动模式一样,依然会创建一个新的实例;

  • 当前栈中不存在该Activity的实例时,其行为同standard启动模式。

3. singleTask站内复用模式:

如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,因为singleTask本身自带clearTop这种功能。并且会回调该实例的onNewIntent()方法。其实这个过程还存在一个任务栈的匹配,因为这个模式启动时,会在自己需要的任务栈中寻找实例,这个任务栈就是通过taskAffinity属性指定。如果这个任务栈不存在,则会创建这个任务栈。不设置taskAffinity属性的话,默认为应用的包名。

4. singleTask站内复用模式:

如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,因为singleTask本身自带clearTop这种功能。并且会回调该实例的onNewIntent()方法。其实这个过程还存在一个任务栈的匹配,因为这个模式启动时,会在自己需要的任务栈中寻找实例,这个任务栈就是通过taskAffinity属性指定。如果这个任务栈不存在,则会创建这个任务栈。不设置taskAffinity属性的话,默认为应用的包名。

相关文章

网友评论

    本文标题:高级安卓开发面试题详解

    本文链接:https://www.haomeiwen.com/subject/rkjjvqtx.html