程序员的职业规划

高级安卓开发面试题详解

2019-03-23  本文已影响76人  NewSalton

高级安卓开发面试题详解

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

1. 如何理解volatile?

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

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

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

3.Activity的启动模式

1. standard标准模式:

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

2. singleTop栈顶复用模式:

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

3. singleTask站内复用模式:

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

4. singleTask站内复用模式:

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

上一篇 下一篇

猜你喜欢

热点阅读