操作系统角度详解Activity(一)

来源:互联网 发布:软件服务行业账务处理 编辑:程序博客网 时间:2024/06/16 12:13

     操作系统中,建立了进程的五种状态模型,即 静止就绪、活动就绪、静止阻塞、活动阻塞、运行五种状态,同样熟悉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;
    }

是不是很相似,对的,很相似。这里我们将用户操作视为一次调度





0 0
原创粉丝点击