Android应用程序组件Activity的"singleTask"(10)

它是例行性地检查当前任务顶端的activity

是否是即将启动的Activity的实例,

如果是否的话,在某些情况下,它什么也不做,就结束这个函数调用了。

这里,当前任务顶端的Activity为MainActivity,它不是SubActivity实例,于是继续往下执行:

 
 
  1. [java] 
  2. view plaincopy boolean newTask = false
  3.   // Should this be considered a new task? 
  4.   if (r.resultTo == null && !addingToTask 
  5.   && (launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) { 
  6.   ...... 
  7.   } else if (sourceRecord != null) { 
  8.   if (!addingToTask && 
  9.   (launchFlags&Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) { 
  10.   ...... 
  11.   } else if (!addingToTask && 
  12.   (launchFlags&Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) != 0) { 
  13.   ...... 
  14.   } 
  15.   // An existing activity is starting this new activity, so we want 
  16.   // to keep the new one in the same task as the one that is starting 
  17.   // it. 
  18.   r.task = sourceRecord.task; 
  19.   ...... 
  20.   } else { 
  21.   ...... 
  22.   } 

这里首先将newTask变量初始化为false,表示不要在新的任务中启动这个SubActivity。由于前面的已经把addingToTask设置 为true,因此,这里会执行中间的else if语句,即这里会把r.task设置为sourceRecord.task,即把SubActivity放在MainActivity所在的任务中启 动。

***,就是调用startActivityLocked函数继续进行启动Activity的操作了。后面的操作这里就不跟下去了,有兴趣的读者可以参 考两篇文章Android应用程序启动过程源代码分析和Android应用程序内部启动Activity过程(startActivity)的源代码分 析。

THE END