Fragment启动流程-思维导图
2016-04-16 10:03:31 0 举报
AI智能生成
Fragment的启动流程
作者其他创作
大纲/内容
Fragment启动分析
performLaunchActivity(...)
实例化Activity
final FragmentController mFragments = FragmentController.createController(new HostCallbacks());
public HostCallbacks() {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 super(Activity.this );\u00A0 \u00A0 \u00A0 \u00A0 }
final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();
public static final FragmentController createController(FragmentHostCallback callbacks) {\u00A0 \u00A0 \u00A0 \u00A0 return new FragmentController(callbacks);\u00A0 \u00A0 }
private FragmentController(FragmentHostCallback callbacks) {\u00A0 \u00A0 \u00A0 \u00A0 mHost = callbacks;\u00A0 \u00A0 }
activity.attach(...)
mFragments.attachHost(null);
final void performCreate(Bundle icicle) {\u00A0 \u00A0 \u00A0 \u00A0 onCreate(icicle);\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 \u00A0 \u00A0 performCreateCommon();\u00A0 \u00A0 }
protected void onCreate(@Nullable Bundle savedInstanceState) {...mFragments.dispatchCreate();...}
public void dispatchCreate() {\u00A0 \u00A0 \u00A0 \u00A0 mHost.mFragmentManager.dispatchCreate();\u00A0 \u00A0 }
public FragmentManager getFragmentManager() {\u00A0 \u00A0 \u00A0 \u00A0 return mFragments.getFragmentManager();\u00A0 \u00A0 }
public FragmentManager getFragmentManager() {\u00A0 \u00A0 \u00A0 \u00A0 return mHost.getFragmentManagerImpl();\u00A0 \u00A0 }
FragmentManagerImpl getFragmentManagerImpl() {\u00A0 \u00A0 \u00A0 \u00A0 return mFragmentManager;\u00A0 \u00A0 }
public FragmentTransaction beginTransaction() {\u00A0 \u00A0 \u00A0 \u00A0 return new BackStackRecord(this);\u00A0 \u00A0 }
public BackStackRecord(FragmentManagerImpl manager) {\u00A0 \u00A0 \u00A0 \u00A0 mManager = manager;\u00A0 \u00A0 }
void addOp(Op op) {\u00A0 \u00A0 \u00A0 \u00A0 if (mHead == null) {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mHead = mTail = op;\u00A0 \u00A0 \u00A0 \u00A0 } else {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 op.prev = mTail;\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mTail.next = op;\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mTail = op;\u00A0 \u00A0 \u00A0 \u00A0 }\u00A0 \u00A0 \u00A0 \u00A0 op.enterAnim = mEnterAnim;\u00A0 \u00A0 \u00A0 \u00A0 op.exitAnim = mExitAnim;\u00A0 \u00A0 \u00A0 \u00A0 op.popEnterAnim = mPopEnterAnim;\u00A0 \u00A0 \u00A0 \u00A0 op.popExitAnim = mPopExitAnim;\u00A0 \u00A0 \u00A0 \u00A0 mNumOp++;\u00A0 \u00A0 }
\u00A0public int commit() {\u00A0 \u00A0 \u00A0 \u00A0 return commitInternal(false);\u00A0 \u00A0 }
Runnable mExecCommit = new Runnable() {\u00A0 \u00A0 \u00A0 \u00A0 @Override\u00A0 \u00A0 \u00A0 \u00A0 public void run() {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 execPendingActions();\u00A0 \u00A0 \u00A0 \u00A0 }\u00A0 \u00A0 };
\u00A0 \u00A0 public boolean execPendingActions() {\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 \u00A0 \u00A0 boolean didSomething = false;\u00A0 \u00A0 \u00A0 \u00A0 while (true) {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 int numActions;\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 synchronized (this) {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 if (mPendingActions == null || mPendingActions.size() == 0) {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 break;\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 }\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 numActions = mPendingActions.size();\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 if (mTmpActions == null || mTmpActions.length numActions) {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mTmpActions = new Runnable[numActions];\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 }\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mPendingActions.toArray(mTmpActions);\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mPendingActions.clear();\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mHost.getHandler().removeCallbacks(mExecCommit);\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 }\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mExecutingActions = true;\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 for (int i=0; inumActions; i++) {\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mTmpActions[i].run();\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mTmpActions[i] = null;\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 }\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 mExecutingActions = false;\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 didSomething = true;\u00A0 \u00A0 \u00A0 \u00A0 }\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 \u00A0 \u00A0 return didSomething;\u00A0 \u00A0 }
public void onAttach(Context context) {...}
void performCreate(Bundle savedInstanceState) {\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 \u00A0 \u00A0 onCreate(savedInstanceState);\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 }
public void onCreate(@Nullable Bundle savedInstanceState) {...}
final void performCreateCommon() {\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 \u00A0 \u00A0 mFragments.dispatchActivityCreated();\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 }
public void dispatchActivityCreated() {\u00A0 \u00A0 \u00A0 \u00A0 mHost.mFragmentManager.dispatchActivityCreated();\u00A0 \u00A0 }
void performActivityCreated(Bundle savedInstanceState) {\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 \u00A0 \u00A0 onActivityCreated(savedInstanceState);\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 }
public void onActivityCreated(@Nullable Bundle savedInstanceState) {\u00A0 \u00A0 \u00A0 \u00A0 ...\u00A0 \u00A0 }
0 条评论
回复 删除
下一页