被后台杀死后,Android应用如何重新走闪屏逻辑
当应用被后台杀死后,Android是如何走闪屏逻辑的?
恢复的过程是先恢复的第一个界面是用户最后看到的那个界面。
如下图是杀死之前的堆栈:
如下图是被后台杀死后,Activity的堆栈,既然被销毁了自然堆栈为空,但是AMS被保留下来
当用户再次启动APP,看到的是最后看到的那个Activity,也就是C Activity。
在用户点击返回后,看到的C Activity之前的B Activity,以此类推。
怎么判断当前Activity是否为恢复流程状态?
1 | @Override |
只需要判断savedInstanceState是否非空即可判断,如果为非空,则为后台杀死恢复流程。
如何在恢复流程APP,走闪屏的逻辑?
- 进程存活,Activity存活
- 进程存活,但是没有Activity存活
- 进程不存在(无论是否被杀)
其实后面两种完全可以看做一种,这个时候,都是要先start MainActivity,然后让MainActivity在其OnCreate中通过startActivityForResult启动SplashActivity,SplashActivity返回后,在start TargetActivity。下面的讨论都是针对后面两种,需要做的有两件事
- 一是:检测出后面两种场景,并且在唤起主界面的时候需要添加Intent.FLAG_ACTIVITY_CLEAR_TASK清理之前的现场
- 二是:在MainActivity的路由系统中,针对这两种场景要,先跳转闪屏,闪屏回来后,再跳转推送页
1 | Intent intent = new Intent(this, MainActivity.class); |
在MainActivity的路由中,需要区分是否推送跳转进来的
1 | @Override |