Android基础——Activity相关

Activity作为Android中的四大组件之一,而且是我们最常用的,想必所有的Android开发者都不会陌生,无论对其概念还是用法都有一定理解,那我们今天主要讲些什么呢?

今天主要讲两个问题:
1、Activity是如何启动的?
2、两个Activity的切换,其生命周期的变化如何?

第一个问题个人认为有一篇文章写得很详细
【凯子哥带你学Framework】Activity启动过程全解析

大家看懂这篇文章,那么对Android的Activity启动过程肯定非常了解了,其实Activity的启动可简单理解为:
当系统启动一个Activity的时候,首先会发送一个请求,而这个请求会由Instrumentation来处理,然后它通过Binder向ActivityManagerService(AMS)发送请求,而AMS内部维护着一个ActivityStack并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态,从而完成一个Activity的启动。

第二个问题其实在我们了解第一个问题之后就能很容易理解了。
在ActivityStack中的resumeTopActivityInnerLocked方法中有这样一段代码:

boolean dontWaitForPause = (next.info.flags&ActivityInfo.FLAG_RESUME_WHILE_PAUSING) != 0;
boolean pausing = mStackSupervisor.pauseBackStacks(uerLeaving,true,dontWaitForPause);

if(mResumedActivity != null){
        pausing |= statPausingLocked(userLeaving,false,true,dontWaitForPause);
                if(DEBUG_STATES) Slog.d(TAG,"resumeTopActivityLocked:Pausing" + mResumedActivity);
}

从上述代码可以看出,在新的Activity启动之前,栈顶的Activity需要先onPause后,新Activity才能启动。
这样也确实符合官方对onPause 的解释:不能在onPause中做重量级操作,因为必须onPause执行完成后,新的Activity才能onResume。

通过分析这个问题,我们知道如果我们想进行一些耗时操作,需要尽量在onStop中去完成,避免在onPause中,因为这样会影响新的Activity的启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值