启动应用后,系统当前任务栈如图2所示:
图2 应用启动默认任务栈
当MainActivity
启动SingleTaskActivity
时,由于SingleTaskActivity
没有设置taskAffinity
,因此其默认taskAffinity
为系统默认任务栈(即应用启动时所创建的任务栈),所以系统在当前任务栈中寻找是否已经存在SingleTaskActivity
的实例。不存在则创建这个activity的实例并置于栈顶,如图3所示:
图3 任务栈中无实例对象时启动SingleTaskActivity
其运行日志如下:
2021-04-04 22:45:03.650 17626-17626/com.example.myfirstapp I/System.out: MainActivity Create. Task Id: 43112
2021-04-04 22:45:14.365 17626-17626/com.example.myfirstapp I/System.out: SingleTaskActivity Create. Task Id: 43112
2021-04-04 22:45:14.803 17626-17626/com.example.myfirstapp I/System.out: MainActivity Stop. Task Id: 43112
如果当前栈中存在SingleTaskActivity
的实例,则调用该实例的onNewIntent()
方法,并清空任务栈中该实例之上的所有activity的实例,并将其置于栈顶。其调用图如图4所示:
图4 任务栈中存在实例对象时启动SingleTaskActivity
其运行日志如下:
2021-04-04 22:45:03.650 17626-17626/com.example.myfirstapp I/System.out: MainActivity Create. Task Id: 43112
2021-04-04 22:45:14.365 17626-17626/com.example.myfirstapp I/System.out: SingleTaskActivity Create. Task Id: 43112
2021-04-04 22:45:14.803 17626-17626/com.example.myfirstapp I/System.out: MainActivity Stop. Task Id: 43112
2021-04-04 22:45:27.204 17626-17626/com.example.myfirstapp I/System.out: MainActivity Create. Task Id: 43112
2021-04-04 22:45:27.614 17626-17626/com.example.myfirstapp I/System.out: SingleTaskActivity