欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android高级岗面试刷题01

程序员文章站 2024-03-22 14:26:16
...

1.Activity启动模式有哪些?

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

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

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

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

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

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

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

<activity>指定属性 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性能有过多的消耗。