大家都知道直接使用Application的Context去打开一个Activity在手机系统低于7.0时会报错:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity。
Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用 Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。喜欢研究源码的同学可以去深究一下。
今天要说的就是增加上述flag到底会有什么改变?
什么是任务栈(Task)?
任务是指在执行特定作业时与用户交互的一系列 Activity。 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中。其实就是以栈的结构(先进后出)将依次打开的activity记录.
为什么要用任务栈?
为了记录用户开启了那些activity,记录这些activity开启的先后顺序,google引入任务栈(task stack)概念,帮助维护好的用户体验。
如何查看当前系统的任务栈?
手机中 –> 长按home或者多任务键会进到 概览屏幕 的一个界面
命令行中 –> adb shell dumpsys activity
近期任务栈: