大家都知道直接使用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
近期任务栈:
其中的一个栈:
当前所有进程:
这里面有我们的老朋友oom_adj,可以根据这个属性判断当前进程保活程度
详情请戳这里:进程保活之oom_adj级别查询
显示了所有现在正在运行的进程。
这里还有一些重要的进程组——持久系统进程(persistent system processes),前台系统进程(foreground processes),后台系统进程(background processes),最终缓存进程(finally cached processes)。
这些进程种类对于理解它是如何影响系统是非常重要的。
本文探讨了在Android中启动Activity时遇到的AndroidRuntimeException问题,原因是使用了Context的startActivity方法而非Activity的。通过添加Intent.FLAG_ACTIVITY_NEW_TASK标志可以避免此错误。任务栈(Task)是按顺序排列的Activity集合,用于记录用户操作,维持良好的用户体验。要查看任务栈,可以在手机概览屏幕中或通过adb shell dumpsys activity命令进行检查。
1417

被折叠的 条评论
为什么被折叠?



