zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ajax简单案例
    jquery中的数据传输
    java-Reflect
    Factory Method 和AbstractFactory
    Singleton
    英语六级口语备考指南
    ACM信息汇总
    jquery练习
    char可不可以存汉字
    信息安全
  • 原文地址:https://www.cnblogs.com/renhui/p/9135052.html
Copyright © 2011-2022 走看看