Android 页面跳转之生命周期调用顺序问题
| Android Activity 常用技巧 |
| Android Activity 启动模式和任务栈 |
| Android 页面跳转之生命周期调用顺序问题 |
一、页面跳转逻辑分析
1.1 跳转逻辑分析
Android在界面跳转的时候,比如从Activity A 跳回 Activity B,并不是先执行A的onDestroy,而是执行完A的onPause之后就立即跳回Activity B里的onResume。在执行了Activity B 的onResume之后一两秒甚至更长一点的时间才执行Activity A里的onDestroy。
1.2 跳转逻辑特点和隐患
这样的处理机制应该是为了能够立即响应用户的操作。但是这样子的话,如果Activity A在运行前和运行后都要进行预处理和反预处理的话,便会存在问题。比如一个能播放加密视频的播放器里,如果把视频的解密操作放在onCreate里,把视频的加密操作放在onDestory里。此时Activity A便是播放视频的界面,Activity B便是播放列表/主界面。在Activity B点击相应的视频c进入到Activity A里,在onCreate里执行解密使得视频可以播放。当按返回键的时候先执行Activity B的onResume,所以在视频c加密前就跳回了Activity B的界面,因此在此时还能点击进入Activity B。假设在这个时候(Activity A的onDestroy还没被调用,但因为Activity B的onResume已运行完毕,所以可以跟Activity B交互)用户点击视频c,再次进入Activity A,则Activity A在onCreate中解密视频c(此时视频c是已经加密过的)。那么,如果加密函数不和解密函数等价的话,且二次解密不会使视频回复到原视频的话,则这个视频经过二次解密,就已经成为废视频了。
1.3 跳转逻辑思路整理
从前面的分析可以看出,对时间要求和Activity是否获取焦点密切相关的操作,不能放在onCreate和onDestroy里,而应该考虑放在onResume和onPause里。而像上述举的例子,如果是使用surfaceView来播放视频的话,也可以考虑在surfaceHolder.addCallback里的new Callback()的实现中的surfaceCreated和surfaceDestroyed两个函数里分别实现。
二、示例
这里使用的最简单的测试逻辑,测试并证明上面的分析是正确的。开始为MainActivity,跳转到Main2Activity,然后再回到MainActivity,此时触发的生命周期的逻辑:
2.1 三星手机(Android 4.3 版本)
E/111: onCreate
E/111: onResume
E/222: onCreate
E/222: onResume
E/111: onStop
E/222: onPause
E/111: onResume
E/222: onStop
E/222: onDestroy
2.2 华为手机(Android 7.0 版本)
E/111: onCreate
E/111: onResume
E/222: onCreate
E/222: onResume
E/111: onStop
E/222: onPause
E/111: onResume
E/222: onStop
E/222: onDestroy
Android 页面跳转之生命周期调用顺序问题的更多相关文章
- Servlet(简介,请求参数,页面跳转,生命周期,创建,配置,ServletContext,线程)
1.Servlet简介 servlet是java servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序, 主要功能在于交互式浏览和修改数据,生成动态的web内容 服务端运行的 ...
- activity生命周期分析(两个activity之间跳转的生命周期执行顺序)
NoteMainActivity点击跳转至NoteListActivity 我们都了解: 当A界面点击进入B界面时,此时 A===onPause--->onStop ...
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
- Android全面解析之Activity生命周期
前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...
- android面试总结01 activity生命周期
面试常常会被问到的: Q:能说一下Activity的生命周期吗? Activity生命周期例如以下: onCreat onStart onResume onPause onStop onDestory ...
- Android React Native组件的生命周期及回调函数
熟悉android的童鞋应该都清楚,android是有生命周期的,其很多组件也是有生命周期.今天小编和大家分享的React Native组件的生命周期,还不了解的童鞋,赶紧来围观吧 在android开 ...
- vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03
目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...
- React生命周期执行顺序详解
文章内容转载于https://www.cnblogs.com/faith3/p/9216165.html 一.组件生命周期的执行次数是什么样子的??? 只执行一次: constructor.compo ...
- vue父子组件生命周期执行顺序
之前写了vue的生命周期,本以为明白了vue实例在创建到显示在页面上以及销毁等一系列过程,以及各个生命周期的特点.然而今天被问到父子组件生命周期执行顺序的时候一头雾水,根本不知道怎么回事.然后写了一段 ...
随机推荐
- user story
What is a user story? A user story is a short description of something that your customer will do wh ...
- (转)2018CRM系统最新排行榜
https://www.jianshu.com/p/718cc29de91f 2018CRM系统最新排行榜 深谷幽兰呼 关注 2018.09.04 10:22 字数 1524 阅读 3182评论 0喜 ...
- CSS 图像居中对齐
CSS 图像居中对齐 我们在<CSS 内外边距>学过内容居中,它的原理是将外边左右设置为auto.图像居中也是这个原理. 示例 <!DOCTYPE html> <htm ...
- python入门(一):进入python的交互模式、pip的使用和数据类型
环境安装: https://www.python.org/ pycharm 社区版路径: http://www.jetbrains.com/pycharm/download/download-than ...
- FortiGate日志中session clash
1.出现于:FortiGate v5.0和v5.2 2.出现原因 Session clash messages appear in the logs when a new session is cre ...
- ROLAP、MOLAP和HOLAP区别
对没有使用过数据仓库的人,对这三个概念确实是有点混淆不清.包括我自己本身不是做数据仓库出身,所以实际上是从实践出发,理论基础是有点匮乏的. 一.基本概念 1. OLAP OLAP(on-Line An ...
- [leetcode]366. Find Leaves of Binary Tree捡树叶
Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all leaves ...
- [leetcode]87. Scramble String字符串树形颠倒匹配
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- Django之Form、ModelForm 组件
Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...
- (转载)Android开发——Android中常见的4种线程池(保证你能看懂并理解)
0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...