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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Php公众号40029,网页授权获取微信用户信息错误40029:不合法的oauth_code

    Php公众号40029,网页授权获取微信用户信息错误40029:不合法的oauth_code这几天测试刚完成的网页授权获取微信用户信息功能。在第一步:用户同意授权获取code,通过code获取access_token时,有时会出现40029错误。经过调试,发现问题出现在redirect_uri=REDIRECT_URI当跳转到授权链接后,微信会发出两次转向至redirect_uri的相同请求(两次带进来的code是相同的)。第一次的code后已经成功换取得openid以及access_t…

    2022年5月1日
    64
  • 打回来

    打回来

    2021年12月31日
    46
  • layui弹出层使用「建议收藏」

    layui弹出层使用「建议收藏」一直在用的一个提示层,现在分享给大家,感谢作者贤心//首先引入js文件<scriptsrc=”./layer.js”></script>常用的//提示层layer.msg(‘玩命提示中’)提示后可以继续操作的,这种会显示和拒绝差不多//提示层layer.msg(‘玩命卖萌中’,function(){//关闭后的操作//l…

    2022年6月9日
    31
  • java中的局部变量和全局变量哪个优先_java中成员变量是全局变量吗

    java中的局部变量和全局变量哪个优先_java中成员变量是全局变量吗Java变量java中主要有如下几种类型的变量:一、局部变量只在特定的过程或函数中可以访问的变量,被称为局部变量。与局部变量相对应的,是全局变量。全局变量就是从定义的位置起,作用域覆盖整个程序范围的变量。局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会

    2022年8月21日
    9
  • IDEA中MAVEN项目打JAR包的简单方法

    IDEA中MAVEN项目打JAR包的简单方法Idea中为一般的非Web项目打Jar包是有自己的方法的,网上一搜就能查到很多。但是如果是为Maven项目打Jar包,其实是很简单的,因为maven本身就有打Jar包的命令。最简单的方法  首先是在maven项目的pom.xml中添加打包的插件,这里有很多种方式的。最最简单的就是只使用maven-compiler-plugin、maven-jar-plugin插件,并且指定程序入…

    2022年6月19日
    44
  • 在Eclipse中使用JUnit4进行单元測试(0基础篇)

    在Eclipse中使用JUnit4进行单元測试(0基础篇)

    2021年11月30日
    41

发表回复

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

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