Android高级岗面试刷题01

1.Activity启动模式有哪些?

Activity的有四种启动模式,分别为standard,singleTop,singleTask,singleInstance。

2.如何设置Activity启动模式?

可以在 AndroidManifest.xml 配置的 android:launchMode 属性为以上四种之一即可。

3.说一说standard启动模式吧。

standard 模式是默认的启动模式,不用为配置 android:launchMode 属性即可,当然也可以指定值
为 standard。 简单理解,比如我们创建FirstActivity,里面放一个按钮,执行如下代码:
Intent intent = new Intent(FirstActivity.this, FirstActivity.class); 
startActivity(intent);

实际上会在栈中创建多个不同的FirstActivity实例。

4.说一说singleTop启动模式吧。

指定属性 android:launchMode="singleTop" ,系统就会按照 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性能有过多的消耗。

 

你可能感兴趣的:(Android高级岗面试实战)