码迷,mamicode.com
首页 > 其他好文 > 详细

Activity管理机制

时间:2014-09-17 16:54:02      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   2014   sp   cti   代码   log   on   

文章仅记录自己的一点理解,供日后参考。

AMS管理四大组件外加进程管理,其中最庞大的算是Activity了吧。

1、AMS中对ActivityStack划分为两类,其中一类是FrontStack,另一类刚好相反。

    boolean isFrontStack(ActivityStack stack) {
        return !(stack.isHomeStack() ^ getFocusedStack().isHomeStack());
    }

    ActivityStack getFocusedStack() {
        if (mFocusedStack == null) {
            return mHomeStack;
        }
        switch (mStackState) {
            case STACK_STATE_HOME_IN_FRONT:
            case STACK_STATE_HOME_TO_FRONT:
                return mHomeStack;
            case STACK_STATE_HOME_IN_BACK:
            case STACK_STATE_HOME_TO_BACK:
            default:
                return mFocusedStack;
        }
    }

上面的代码可以得出以下结论:

A )、对于4.4目前只有两个ActivityStack的逻辑很清晰:HomeStack、AStack

a、如果getFocusedStack()==HomeStack,那么HomeStack就是FrontStack,另一个就是非FrontStack。

b、如果getFocusedStack()==    AStack,那么HomeStack就是非FrontStack,另一个就是FrontStack。 

B )、如果做成多窗口至少有三个ActivityStack:HomeStack、AStack、BStack

a、如果getFocusedStack()==HomeStack,那么HomeStack就是FrontStack,AStack、BStack就是非FrontStack。

b、如果getFocusedStack()==       AStack,那么HomeStack就是非FrontStack,AStack、BStack就是FrontStack。

c、如果getFocusedStack()==       BStack,那么HomeStack就是非FrontStack,AStack、BStack就是FrontStack。

按照现有的逻辑来说,HomeStack跟其他所有ActivityStack是完全相反的,其他所有ActivityStack要么都是FrontStack,要么都是非FrontStack。那它这个isFrontStack分类有啥用?出于什么目的而设计的?


Activity管理机制

标签:style   blog   java   2014   sp   cti   代码   log   on   

原文地址:http://blog.csdn.net/guoqifa29/article/details/39341931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!