android Activity的onPause()与onResume()[通俗易懂]

android Activity的onPause()与onResume()[通俗易懂]官方文档地址:http://www.android-doc.com/training/basics/activity-lifecycle/pausing.html#Resume Pause和Resume一个Activity在一般的app使用中,前台的activity一般是会被视觉组件所遮住的,这就会导致activity的pause。举个例子,当一个半透明的activity打开的时候(就…

大家好,又见面了,我是你们的朋友全栈君。

官方文档地址:http://www.android-doc.com/training/basics/activity-lifecycle/pausing.html#Resume

 

Pause和Resume一个Activity

在一般的app使用中,前台的activity一般是会被视觉组件所遮住的,这就会导致activity的pause。举个例子,当一个半透明的activity打开的时候(就像某种形式的对话框一样),这之前的activity会pause。只要activity仍然部分可见,但是当下activity并不可操作,它就处在pause中了。

但是,一旦这个activity全部被遮住了,并且不可见,它就stop了。(这会在下节课讨论到)

当你的activity进入pause状态的时候,这个系统调用了在activity中的onPause()这个方法,onPause ()这个方法让你能够结束一些正在进行的任务,而这些任务在停止的时候就不能继续了(比如一个视频)。它也能够让你在用户执意要离开你的app时,留存应该被永久保存的信息。如果用户从pause的状态又回到了你的activity,这个系统resume这个activity并且调用了onResume()这个方法。

 

注意:当你的activity收到了一个调用onPause()的请求,它可能表示这个activity将会被停止一段时间并且使用者很可能会再次回到你的activity来。但是这也很可能表示着用户正在离开你的app。

 

android Activity的onPause()与onResume()[通俗易懂]

图片:当一个半透明的activity遮住了你的activity,这个系统调用了onPause(),并且activity在pause的状态中等待。如果用户当它仍然pause的时候再次回到了activity,这个系统会调用onResume()。

 

pause你的Activity

当这个系统为你的activity调用onPause()的时候,讲道理的话,它意味着你的activity仍然是部分可见的,但是也非常有可能表示是用户正在离开你的activity并且它之后将很快进入stop的状态。你应该经常会在以下情况下用到onPause()。

1、  结束占用CPU的动画或者其他正在运行任务。

2、  提交没有保存的改变,但是只有在用户离开的时候希望这些改变被保存的时候。

3、  释放系统资源,就像广播接收者,对传感器的操纵(就像GPS),或者在acitivity被pause之后和用户不需要的时候,任何可能影响你电池寿命的资源。

 

举个例子,如果你的应用用到了camera,那么onpause()方法是一个很好的释放它的方法。

 

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

 

 

 

总体上说,你不应该使用onPause()来保存用户的改变到永久的存储空间中(比如表单输入个人信息)。唯一的你需要用onPause()来把用户的改变存储到永久内存中的情况是,当你的某县用户需要自动化保存的时候(比如写一封email)。但是在onPause()中你应该避免执行占用大量CPU的工作,比如写入数据库。因为这会减慢你可视化转换到下一个activity的速度。(你应该把这种繁重的关闭操作放到onstop()中)

在onPause()方法中,你应该要保持一部分的操作,来保证你的activity结束的时候能够以较快的速度跳转到下一个用户目的地。

 

注意:当你的activity被pause的时候,这个activity实例在内存中是占用位置的,而且在Activity被resume的时候会被再次唤醒。你不需要在resume状态之前的任何回调函数中,重新初始化任何已经被创建过的组件。

 

resume你的Activity

当用户从pause的状态resume你的activity的时候,系统调用了onResume()的函数。

 

考虑到系统每次进入前台运行的时候都会调用这个函数,即使是在这个activity已经被创建过的情况下。同样的你应该实现onResume()来初始化你在onPause()中释放的组件,并且并且执行一些其他在当activity进入resume状态的时候需要执行的初始化(比如打开动画,初始化只有activity获取了焦点后才需要使用的组件)。

 

接下来的onResume()的例子是与onPause()在上面的例子相配的,所以它初始化了在activity被pause的时候需要释放的camera。

 

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    // Get the Camera instance as the activity achieves full user focus
    if (mCamera == null) {
        initializeCamera(); // Local method to handle camera init
    }
}

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137142.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月2日 下午2:36
下一篇 2022年6月2日 下午2:46


相关推荐

  • 怎样搭建serveru ftp个人服务器

    怎样搭建serveru ftp个人服务器首先说说什么是 ftp FTP 协议是专门针对在两个系统之间传输大的文件这种应用开发出来的 它是 TCP IP 协议的一部分 FTP 的意思就是文件传输协议 用来管理 TCP IP 网络上大型文件的快速传输 FTP 最早也是在 Unix 上开发出来的 并且很长一段时间里只有 Unix 系统支持 FTP 功能 后来逐渐普及到其他系统 并成为 Internet Intranet 网络中的标准组件 FTP 服务器就是局域网信息资源的存储中心 主要是用来进行文件共享和传输 为了便于数据信息的共享和沟通 很多企业甚至个人都想搭建自己的 ftp

    2026年3月26日
    2
  • Java实现 LeetCode 385 迷你语法分析器

    Java实现 LeetCode 385 迷你语法分析器385 迷你语法分析器给定一个用字符串表示的整数的嵌套列表 实现一个解析它的语法分析器 列表中的每个元素只可能是整数或整数嵌套列表提示 你可以假定这些字符串都是格式良好的 字符串非空字符串不包含空格字符串只包含数字 0 9 示例 1 给定 s 324 你应该返回一个 NestedIntege 对象 其中只包含整数值 324 示例 2 给定 s

    2026年3月17日
    3
  • 十七、访问者模式-访问数据结构并处理数据 #和设计模式一起旅行#「建议收藏」

    看过千山万水,依旧走不出自己的内心世界!故事背景Vistor : 访客,参观者,访问,本篇就讲讲Vistor模式,也就访问模式!有时候在软件开发中,我们会在一个数据结构中存放许多不同类型的对象信息,而且对每一个对象的处理方式并不相同,就存在数据结构对象内容的存放和数据的处理如何进行合理的设计! 如果将数据的处理和数据结构存放在一起,那么如果要新增一些对象信息的话,就需要修改…

    2022年2月27日
    35
  • 寒衣节有感而发_春寒叹表达了诗人什么感情

    寒衣节有感而发_春寒叹表达了诗人什么感情寒衣节有感而发

    2022年4月20日
    58
  • Java通过JDBC连接SQLserver 2017

    Java通过JDBC连接SQLserver 2017最近老师让我们用 JDBC 使用 SQLserver 但是她给的 SQLserver 版本号太老了 而且在 win10 上会出现很多问题 所以我写下这篇文章记录一下 安装 SQLserver 我用的是 SQLserver201 企业版要收费 但是这个是免费的 在官网上可以下载 https www microsoft com zh cn sql server sql server edit

    2026年3月26日
    2
  • cocos2d-x lua 内存回收

    cocos2d-x lua 内存回收

    2021年12月8日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号