Android高级岗面试刷题01
1.Activity启动模式有哪些?
Activity的有四种启动模式,分别为standard,singleTop,singleTask,singleInstance。
2.如何设置Activity启动模式?
可以在 AndroidManifest.xml 配置<activity>的 android:launchMode 属性为以上四种之一即可。
3.说一说standard启动模式吧。
Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
startActivity(intent);
实际上会在栈中创建多个不同的FirstActivity实例。
4.说一说singleTop启动模式吧。
比如我们创建FirstActivity,里面放一个按钮,执行如下代码:
Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
startActivity(intent);
栈中只会生成一个FirstActivity实例。如果更改一下,FirstActivity跳转到SecondActivity,SecondActivity再跳转到FirstActivity,发现两个FirstActivity,因为此时FirstActivity不在栈顶。简单地说,检查栈顶,如果是同一类Activity,不在生成新的对象。
5.说一说singleTask启动模式吧。
同样例子,FirstActivity跳转到SecondActivity,SecondActivity再跳转到FirstActivity。发现FirstActivity唯一,SecondActivity不唯一,说明这种模式会将需要显示的Activity置于栈顶,其他的弹栈。
6.说一说singleInstance启动模式吧。
同样例子,修改 FirstActivity 的 launchMode="standard",SecondActivity 的 launchMode="singleInstance",FirstActivity跳转到SecondActivity,SecondActivity再跳转到FirstActivity。SecondActivity会在一个独立的栈里面,在 SecondActivity 中再次跳转到 FirstActivity,这个时 候系统会在原始栈结构中生成一个 FirstActivity 实例,然后回退两次,注意,并没有退出,而是回到了 SecondActivity, 为什么呢?是因为从 SecondActivity 跳转到 FirstActivity 的时候,我们的起点变成了 SecondActivity 实例所在的栈 结构,这样一来,我们需要“回归”到这个栈结构。
7.Activity生命周期,从A页面打开B页面,两个页面的生命周期。
分两种情况,如果是透明A页面onPause(),B页面onCreate(),onStart(),onResume()。
如果A页面不透明,A页面onPause(),onStop(),B页面onCreate(),onStart(),onResume()。
8.App启动优化怎么做?
这就是增加Application OnCreate时间的主要元凶,所以需要尽量避免在Application onCreate时同步做初始化操作。比较好的解决方案就是对三方SDK实行懒加载,不在Application OnCreate()时初始化,在真正用到的时候再去加载。
9.主线程的Looper死循环为什么不会导致ANR?(重要*****)
而且主线程Looper从消息队列读取消息,当读完所有消息时,主线程阻塞。子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此loop的循环并不会对CPU性能有过多的消耗。