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 页面跳转之生命周期调用顺序问题的更多相关文章

  1. Servlet(简介,请求参数,页面跳转,生命周期,创建,配置,ServletContext,线程)

    1.Servlet简介 servlet是java servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序, 主要功能在于交互式浏览和修改数据,生成动态的web内容 服务端运行的 ...

  2. activity生命周期分析(两个activity之间跳转的生命周期执行顺序)

    NoteMainActivity点击跳转至NoteListActivity 我们都了解: 当A界面点击进入B界面时,此时         A===onPause--->onStop       ...

  3. Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解

    前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...

  4. Android全面解析之Activity生命周期

    前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...

  5. android面试总结01 activity生命周期

    面试常常会被问到的: Q:能说一下Activity的生命周期吗? Activity生命周期例如以下: onCreat onStart onResume onPause onStop onDestory ...

  6. Android React Native组件的生命周期及回调函数

    熟悉android的童鞋应该都清楚,android是有生命周期的,其很多组件也是有生命周期.今天小编和大家分享的React Native组件的生命周期,还不了解的童鞋,赶紧来围观吧 在android开 ...

  7. vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03

    目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...

  8. React生命周期执行顺序详解

    文章内容转载于https://www.cnblogs.com/faith3/p/9216165.html 一.组件生命周期的执行次数是什么样子的??? 只执行一次: constructor.compo ...

  9. vue父子组件生命周期执行顺序

    之前写了vue的生命周期,本以为明白了vue实例在创建到显示在页面上以及销毁等一系列过程,以及各个生命周期的特点.然而今天被问到父子组件生命周期执行顺序的时候一头雾水,根本不知道怎么回事.然后写了一段 ...

随机推荐

  1. T-SQL中CTE表 with关键字

    Select字句在逻辑上是SQL语句最后进行处理的最后一步,所以,以下查询会发生错误: SELECT YEAR(OrderDate) AS OrderYear, COUNT(DISTINCT Cust ...

  2. Python函数定义和使用

    函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果.通过使用函数,可以提高代码的重复利用率.本文主要介绍Python函数的定义.调用和函数参数设置方法. 函数的定义 Python函数定 ...

  3. 550 5.7.1 Client does not have permissions to send as this sender

    收发邮件时出现以上这种情况,系统提示550 5.7.1 Client does not have permissions to send as this sender,这是什么原因赞成的呢? 活动目录 ...

  4. Blender Python脚本的6个技巧

    https://www.youtube.com/watch?v=vFoh3S8MLBI&index=3&list=PLw8Sjaw0TPm0J9DXj3XGi1_9fxXezlzrM ...

  5. Linux下安装PHP环境并配置Nginx支持php-fpm模块

    修改php配置 vi /etc/php.ini 打开php配置文件/etc/php.ini找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存 ...

  6. netty(一) netty有哪几部分构成

    netty netty是一个支持高并发的非阻塞I/O框架. Channel Channel 是 NIO 基本的结构.它代表了一个用于连接到实体如硬件设备.文件.网络套接字或程序组件,能够执行一个或多个 ...

  7. Flask最强攻略 - 跟DragonFire学Flask - 第一篇 你好,我叫Flask

    首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 一. Python 现阶段三大主流Web框 ...

  8. CentOS7配置samba服务

    Step1:安装samba相关软件 [root@node-1 ~]# yum -y install samba samba-client Step2:创建共享目录 [root@node-1 ~]# m ...

  9. 258. Add Digits 入学考试:数位相加

    [抄题]: Given a non-negative integer num, repeatedly add all its digits until the result has only one ...

  10. git的一些常用操作

    一.克隆默认分支 git clone 远程地址 二.克隆某一分支 git clone -b 分支名 远程地址 三.切换分支 git branch 分支名 四.一般开发提交的流程 1).查看本地状态 g ...