Activity相关面试题

1,Activity的生命周期

   正常情况下生命周期:oncreate--onStart--onResume--onPause--onStop--onDestory

   异常情况下:onSaveInstanceState-onPause-onStop-onDestory  重建后onCreate--onRestoreInstanceState

  系统资源不足会回收低优先级的activity,前台--可见但非前台--后台  后台被优先回收,会调用onSaveInstanceState和onRestoreInstanceState来保存和恢复数据。

2,onStart onResume和onPause onStop的区别?

    onStart onStop是针对activity是否可见来说的,onPause onResume是从activity是否位于前台来回调的

3,Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明的呢?如果启动的是一个Dialog呢?

    onPause--onSto--onDestory,onPause, 当前dialog启动不会执行任何回调,其他activity会回调onPause

4,如何避免配置改变时Activity重建?

    在miannifest文件注册activity清单配置configChanges属性,常用的属性有local orientation和keyboardHidden,分别代表系统语言、屏幕旋转和屏幕键盘

5,Activity的四种启动模式?

   standard默认启动模式  singleTop栈顶模式 singleTask栈内复用模式  singleInstance单实例模式

   standard标准启动模式,每次启动都会新建一个实例对象,会默认进入启动它所在的任务栈

   singleTop栈顶复用模式,如果新activity在栈顶,那么这个activity不会被重新创建,并且会回调onNewIntent方法,通过这个方法的参数取出当前请求的信息。

   singleTask栈内复用模式,如果新的activity在栈内存在,那么不会重新创建实例,也会回调onNewIntent方法,会把启动的activity放到栈顶,之前在栈内在这个activity之上的会出栈销毁。

   singleInstance单实例模式,加强的singleTask,这个模式的activity只能单独存在一个任务栈中,后续请求均不会创建新的实例。

6,什么是activity需要的任务栈?启动Activity的标志位?

activity的一个参数taskAffinity 任务相关性,默认是应用的包名,它主要是和singleTask配对使用的,新建的activity实例会运行在名字和taskAffinity的任务栈中。

NEW_TASK,SINGLE_TOP, CLEAR_TOP,(singleTask中设置这个flag,如果被启动的采用standard模式,那么它和它之上的activity都会出栈。)FROM_RECENTES,(不希望通过back按键返回到这个activity,不会出现在历史activity列表中)

7,onNewIntent调用时机

前提:activity已经在栈中存在,启动模式为singleTop,activity在栈顶时,会回调onNewIntent。 启动模式为singleTask和singleIns时会回调onNewIntent。

8,activity的启动流程

   主要是根activity的启动,luncher组件会向ams发送一个启动activity的进程间的通信请求。activityManagerService是一个系统关键服务,主要负责系统activity的启动和调度。luncher组件也是由ams所启动,是手机的home程序,管理和显示手机的所有应用。从packagemanagerservic中获取应用信息。

1,luncher组件首先向ams发送一条启动应用根activity的进程间通信请求

2,ams会把这要启动的应用信息保存下来,然后让luncher组件进入终止状态通信请求。

3,luncher进入终止状态后会给ams一个已经终止完毕的信号,ams收到信号后会继续进行启动activity的请求

4,ams去寻找这个运行activity的进程,如果这个进程不存在,它就会给zaygote进程发送一个进程间的请求,zaygote进程会通过最终调用fork方法通过复制自身创建一个新进程。zaygote进程在创建的时候会在内部创建一个虚拟机实例,通过复制它自身就能得到一个应用程序。

5,最后ams将第二步保存下来的Activity组件信息发送给zaygote进程创建的新的进程,

6,新的应用进程启动完毕后,就会给ams发送一个启动完成的进程间的请求,经过一系列调用startactivity方法来启动activity

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值