关于Activity面试的详解

话不多说,直接进入正题.

一、activity生命周期

首先,什么是activity?大家会不会突然觉得发懵,大家注意,在日常生活中,安卓是与用户交互的,它提供了一个界面,让用户可以进行点击,各种滑动操作,这就是activity的意义,很简单,大家一定要知道,我只是给大家重复一下.接下来,我们看activity的部分

1.activity的4种状态

running状态:表明activity是处于活动状态的,用户可以点击屏幕,然后做出相应,它是一个处于Activity栈顶的一个状态.

paused状态:表明activity失去焦点的时候,或者是被一个非全屏的activity占据,或者有一种情况是它被透明的activity放置在栈顶,这种情况下,它会处于paused状态,(需要注意的是:这个时候只是失去了和用户交互的能力,就是说用户和这个屏幕操作是没用反应的,但并不是说整个activity被销毁了,这时候它所有的成员信息和成员变量都还在,当然还有一种情况,就是处于内存紧张的时候,这个activity会被回收)

stopped状态:这个状态出现在当这个activity完全被另外一个activity覆盖的时候,被覆盖的activity就会处于stopped状态,这个时候它不再是可见的了,但是它和刚才的paused状态一样,它的一些内存状态的信息,成员变量,都可能还在,如果这时候内存不紧张的情况下,它们都还在.

killed状态:表明activity以及被系统回收掉了,就会处于killed状态,这时候所存储的信息肯定不存在了

2.activity的生命周期

首先activity启动的时候,它会走这样的:(第一个场景)

Activity启动 -- >onCreate()-->onStart()-->onResume()  这三个都是什么意思,我为大家详细的讲解一下

onCreate()在Activity被创建的时候会调用,生命周期第一个被调用的方法,在创建Activity的时候一定要重写改方法,在里面可以

做一些初始化工作比如说setlayout,图片的预加载什么的等等

onStart()表明activity正在启动,已经处于用户可见状态,当然它还没有处于前台显示,就是说这个时候用户还不能与activity进行交互和点击,滑动等,简单的理解一下,这时候我们已经看见了,但是没有办法触摸的状态,不可与用户交互

onResume()表明activity已经是在前台可见了,与用户交互了.(注:在这里可以初始化一些资源)

(第二个场景)点击Home键回到主界面(Activity不可见)-->onPause()-->onStop()

onPause():当这个被调用的时候,表明整个activity处于停止状态,当用户使当前的activity退居到后台的时候,onpause方法就会被调用

onstop():一般在onpause执行完之后被调用.表明整个activity已经停止或者被覆盖.如果内存是紧张不够的话,activity可能被回收掉

(第三个场景)当我们再次回到原Activity的时候-->onRestart()-->onStart()-->onResume()

onRestart()表示activity正在重新启动,而且这个activity是由不可见状态变为可见状态的时候,会调用这个方法(例如,从桌面再次回到Activity)

(第四种场景)推出当前Activity时候-->onPause()-->onStop()-->onDestroy()

onDestroy()表明当前activity正在被销毁,可以做一些回收工作以及资源的释放.

3.Android进程优先级

前台/可见/服务/后台/空

前台进程一般就是处于和用户交互的Activity,或者在前台的Activity绑定的service

可见进程就是Activity处于可见,但是用户不能点击的状态

服务进程就是在后台开启了Service服务,就叫做服务进程

后台进程就是前台进程被按了home键,这个时候就是后台进程,不会立刻被回收,会根据内存情况进行相应的回收

空进程是优先级最低的,如果进程不属于上面的几种就是空进程,空进程处于缓存的目的会保留,安卓系统可以随时杀掉它

android进程的回收顺序从先到后分别是:空进程,后台进程,服务进程,可见进程,前台进程。

二、Android的任务栈

一个Task包含的就是activity集合,android系统可以通过任务栈有序的管理activity,一个app当中可能不止一个任务栈,在某些情况下,一个activity也可以独享一个任务栈(singleInstance模式启动的activity)

一个app当中可以有多个任务栈,任务栈是存放activity的,后进先出

三、activity的启动模式

1.standard

这种模式下,每次启动一个acivity时候,都会重新创建一个activity的实例,将它加入到任务栈当中,而且不会考虑之前是否有这个activity实例了,它只会重新创建activity,每创建一个,都会走相应的生命周期.

2.singletop(栈顶复用模式)

如果你创建了acticity,是在任务栈的栈顶,它就不会创建新的acticity,而是复用任务栈顶的activity,如果它不是栈顶,而是栈顶的第二个位置,那么它还会继续创建Activity,所以说为了提高这个模式,安卓又提供了singletask

3.singletask(栈内复用模式)

单例模式,和singletop相似,singletop只是检测栈顶元素是否有需要启动的activity而singletask检测的是整个任务栈当中是否存在需要启动的activity,如果存在,就把它置于栈顶,把这个activity以上的activity都从任务栈当中移除销毁,这时候会回调一个onNewInstance方法

4.singleinstance

这个activity如果在整个系统之中有有其且只有一个实例,而且这个activity独享这个任务栈,这种模式就叫做singleinstance模式

四、scheme跳转协议

scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义最近的scheme协议,可以非常方便跳转app种的各个页面;通过scheme协议,服务器可以定制化,告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等.

应用场景:给服务端口下发一个url路径,然后客户端根据服务端下发的url路径跳转到相应的页面;第二种是通过H5页面跳转页面;第三种是APP根据url跳转到另外一个App的指定页面

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值