尚拙

一个分享技术、学习成长的个人博客网站

0%

Android 面试题整理

Android面试题总结。

Activity 启动模式详解

activity有四种启动模式,分别为standard,singleTop,singleTask,singleInstance。如果要使用这四种启动模式,必须在manifest文件中标签中的launchMode属性中配置。

standard

标准启动模式,也是activity的默认启动模式。

在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity的实例,每个实例都会处理一个Intent对象。

如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,即调用startActivity(new Intent(this,A.class)),会在A的上面再次启动一个A的实例,即当前的桟中的状态为A–>A。

singleTop

如果启动的activity已经位于栈顶,那么就不会重新创建一个新的activity实例,而是复用位于栈顶的activity实例对象。

如果不位于栈顶仍旧会重新创建activity的实例对象。

singleTask

设置了singleTask启动模式的activity在启动时,如果位于activity栈中,就会复用该activity,这样的话,在该实例之上的所有activity都依次进行出栈操作,即执行对应的onDestroy()方法,直到当前要启动的activity位于栈顶。

singleInstance

如果使用singleInstance启动模式的activity在启动的时候会复用已经存在的activity实例。

不管这个activity的实例是位于哪一个应用当中,都会共享已经启动的activity的实例对象。使用了singlestance的启动模式的activity会单独的开启一个共享栈,这个栈中只存在当前的activity实例对象。

onRestart的调用场景

1、点击home键后,再切换回来

2、跳转到其他Activity,再点击返回按钮

3、从本应用切换到其他应用,再切换回来

Activity跳转生命周期

1、启动 A:onCreate() ——> onStart() ——> onResume()

2、A 跳转到 B,[A]onPause() ——> [B]onCreate() ——> [B]onStart() ——> [B]onResume() ——> [A]onStop()

3、B 返回 A,[B]onPause() ——> [A]onRestart() ——> [A]onStart() ——> [A]onResume() ——> [B]onStop() ——> [B]onDestroy()