android activity生命周期方法为何设计成保护方法protected

天王盖地虎626 发布于 2015/05/09 09:05
阅读 446
收藏 0

用过adt-eclipse开发 android项目的朋友应该知道,activity的生命周期方法,默认为protected,当然了,你可以改成public的

生命周期方法实际上是有android操作系统调用的,请问为啥设计成protected方法呢?

protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。

我想了解下,操作系统到底如何顺利的调用到这些方法的呢?

加载中
0
亓斌哥哥
亓斌哥哥

这个问题你要去看Activity的生命周期是谁去调用的。

首先找到android.app.ActivityThread文件, 在这里面有一个Instrumentation mInstrumentation,其实Activity的生命周期就是在ActivityThread中通过mInstrumentation来管理的。例如:

ActivityThread中有一个方法:

public final void performNewIntents(IBinder token,
           List<Intent> intents) {
       ActivityClientRecord r = mActivities.get(token);
       if (r != null) {
            final boolean resumed = !r.paused;
            if (resumed) {
               r.activity.mTemporaryPause = true;
                mInstrumentation.callActivityOnPause(r.activity);
           }
            deliverNewIntents(r, intents);
            if (resumed) {
                r.activity.performResume();
                r.activity.mTemporaryPause = false;
            }
        }
    }



看这一句:

mInstrumentation.callActivityOnPause(r.activity);
然后定位到callActivityOnPause中:

public void callActivityOnPause(Activity activity) {
        activity.performPause();
    }

继续看看activity.performPause()

final void More ...performPause() {
       mFragments.dispatchPause();
        mCalled = false;
       onPause();
       mResumed = false;
       if (!mCalled && getApplicationInfo().targetSdkVersion
               >= android.os.Build.VERSION_CODES.GINGERBREAD) {
          throw new SuperNotCalledException(
                   "Activity " + mComponent.toShortString() +
                   " did not call through to super.onPause()");
       }
       mResumed = false;
    }



看到onPause了吧, 原来onPause是activity自己去调用的哦。


我擦, 写了不少啊, 快够一篇博客的了, 果断有空搞到我博客上,http://blog.csdn.net/qibin0506

0
notreami
notreami

http://blog.csdn.net/luoshengyang/article/details/6689748  

这个问题其实也就是activity是怎么实例化对象和怎么监管的?

返回顶部
顶部