文章仅记录自己的一点理解,供日后参考。
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分类有啥用?出于什么目的而设计的?