Android基础——Activity相关

来源:互联网 发布:品茗预算软件下载 编辑:程序博客网 时间:2024/06/06 17:35

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的启动。

0 0
原创粉丝点击