操作系统中,建立了进程的五种状态模型,即 静止就绪、活动就绪、静止阻塞、活动阻塞、运行五种状态,同样熟悉Android的人也知道Activity生命周期,那么,我们就从操作系统角度解析Activity。
1、定义角度:
进程:是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动。进程还是资源拥有者。
Android:Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件。
乍看之下,两者确实没有什么相似的地方,但是,Activity作为与用户交互的组件,其核心就是资源的拥有者,想一想contentResolver是如何调用的,没错,this.getContentResolver();为什么可以这样调用,其实,就是将Activity作为系统中资源的拥有者实现的。
2.状态角度:
上面两幅图看到过没有??如果没有看到过,可以回去看看操作系统前50页和Android基础书籍前30页。
好的,让我们来详解一下,自行脑补进程创建与退出。
进程创建与Oncreate():进程创建时
(1)申请空白PCB; (2)为新进程分配资源,为新进程的程序和数据以及用户栈分配必要的内存空间。 (3)初始化进程控制块 (4)将新进程插入就绪队列 Android onCreate()protected void onCreate(Bundle savedInstanceState) {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState);
if (mLastNonConfigurationInstances != null) {
mAllLoaderManagers = mLastNonConfigurationInstances.loaders;
}
if (mActivityInfo.parentActivityName != null) {
if (mActionBar == null) {
mEnableDefaultActionBarUp = true;
} else {
mActionBar.setDefaultDisplayHomeAsUpEnabled(true);
}
}
if (savedInstanceState != null) {
protected void onCreate(Bundle savedInstanceState) {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState);
if (mLastNonConfigurationInstances != null) {
mAllLoaderManagers = mLastNonConfigurationInstances.loaders;
}
if (mActivityInfo.parentActivityName != null) {
if (mActionBar == null) {
mEnableDefaultActionBarUp = true;
} else {
mActionBar.setDefaultDisplayHomeAsUpEnabled(true);
}
}
if (savedInstanceState != null) {
Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
mFragments.restoreAllState(p, mLastNonConfigurationInstances != null
? mLastNonConfigurationInstances.fragments : null);
}
mFragments.dispatchCreate();
getApplication().dispatchActivityCreated(this, savedInstanceState);
mCalled = true;
}
mFragments.restoreAllState(p, mLastNonConfigurationInstances != null
? mLastNonConfigurationInstances.fragments : null);
}
mFragments.dispatchCreate();
getApplication().dispatchActivityCreated(this, savedInstanceState);
mCalled = true;
}
这些代码什么意思,是在为Activity分配空间与资源。有没有很相似。
2、静止就绪与onStart
静止就绪的入口有两个:(一)进程创建(二)进程等待条件发生。
onStart 会在onCreate 后执行,或者在onRestart 中回调。Android onRestart源码如下:其含义很明了,设置触发。
protected void onRestart() {
mCalled = true;
}
是不是很相似,对的,很相似。这里我们将用户操作视为一次调度