忽然发现activity的生命周期都忘了,来复习一下。以三个activity为例,全部都是标准启动模式
从main到2到3,没什么好说的
如果再回到2,有两种方式,返回和intent跳转,
先看按返回键
这里需要说明的一点是:如果3是dialog形式的activity,那么返回2时直接走2的onResume,不经过onStart;
再看跳转回去的
会发现使用intent后执行了onCreate,因为重新创建了2的实例,而返回键并没有创建2的实例,只是将其显示在前台,所以执行onRestart,同时3出栈,会被destroy掉
对于返回键的情况,栈中activity的存在情况是从 main 2 3 到main 2(3已经销毁了),而intent的情况是从main,2,3 到main,2,3,2,intent在标准模式下跳转一次会创建一个2的activity实例,这可能会导致一些不好找的问题,比如我在2中需要发送消息,此时有两个2的实例,因此消息会发送两次,有隐患。修正的话可以考虑把2设置为singletask模式,让栈中只有一个activity的实例,保证对外消息只发送一次。