这篇博客主要包含以下知识点:

activity介绍、 activity生命周期的详细过程(不同情况下的变化以及状态的改变)、finish和onDestory方法的关系、onSaveInstanceState和OnRestoreInstanceState的用法

Activity介绍:

Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Activity,如下设置

<actionandroid:name="android.intent.action.MAIN" />

当程序第一次运行时用户就会看这个Activity,这个Activity可以通过启动其他的Activity进行相关操作。当启动其他的Activity时这个当前的这个Activity将会停止,新的Activity将会压入栈中,同时获取用户焦点,这时就可在这个Activity上操作了。都知道栈是先进后出的原则,那么当用户按Back键时,当前的这个Activity销毁,前一个Activity重新恢复。

生命周期的详细过程:

onCreate --->  onStart ---> onResume --->(切到后台,按下Home键) onPause---> onSaveInstanceState ---> onStop --->(从后台切回来)onRestart ---> onStart ---> onResume --->(横屏切换)onPause ---> onSaveInstanceState--->onStop --->onDestory--->onCreate--->onStart--->OnRestoreInstanceState--->onResume--->(back键)finsh --->onPause--->onStop--->onDestory

注: 横屏切换这种操作类似于干掉之前的activity,重新创建一个activity,所以会出现onSaveInstanceState--->onStop--->onDestory---这条线

其中onSaveInstanceState是保存当前的一些状态;OnRestoreInstanceState是恢复之前保存的状态;

ps : 图出自于云课堂老师的课件中,在此引用方便记录

下面举例说明一下finish和onDestory方法的关系:

MainActivity.java

 @Overridepublic void finish() {Log.i("Activity LifeCycle", "finish...1 was called");//super.finish();Log.i("Activity LifeCycle", "finish...2 was called");}@Overrideprotected void onDestroy() {Log.i("Activity LifeCycle", "onDestroy...1 was called");super.onDestroy();Log.i("Activity LifeCycle", "onDestroy...2 was called");}

注释掉super.finish(); 启动app,然后按下back键,日志打印结果如下:

不注释super.finish(),启动app, 然后按下back键,日志打印结果如下:

经过对比发现:

finish()方法用于结束一个Activity的生命周期,在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。

当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。即在finish()中的super调用了ondestory()的都函数;如果注释掉finish中的super方法,发现并不会触发onDestory方法;

而onDestory()方法则是Activity的一个生命周期方法,其作用是在一个Activity对象被销毁之前,Android系统会调用该方法,用于释放此Activity之前所占用的资源。finish会调用到onDestroy方法;

这里讲解一下onSaveInstanceState和OnRestoreInstanceState的用法:比如你想保存一个实例变量的值,而在切换横竖屏的时候导致这个变量值更改了,不是你想要的值,此时心里肯定是,什么鬼?啥情况?一堆黑人问号脸?原因则是因为横屏这种操作实际上是销毁了一个activity,重新创建了一个activity, 而两个activity不是同一个activity, 那对应的实例变量当然也就不同啦!!!比如:

我们发现横屏之后,得分栏为空,这不是我们想要的结果。

解决方法如下:在onSaveInstanceState中保存实例变量得分, 在onRestoreInstanceState中拿到实例变量的值;
    @Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("score", score);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);score = savedInstanceState.getInt("score");TextView scoreTextView = findViewById(R.id.scoreTextView);scoreTextView.setText("得分: " + score);}

如下如结果所示没横屏之后分数栏并没有回到初始值0,而是保存了状态。

此时有小伙伴就要问了,为什么上面的单词以及选项会变呢,之前已经说过,横屏之后会重新创建一个activity, 而单词以及选项是随机产生的,所以会改变,

而且我们在这里也没有保存单词以及选项的状态,只是保存了得分的状态!有兴趣的小伙伴可以自己试着保存一下单词以及得分的状态!

 
 

转载于:https://www.cnblogs.com/leavescy/p/7845921.html

Android activity生命周期相关推荐

  1. Android Activity 生命周期详解及监听

    前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...

  2. Android activity 生命周期(一)

    Android activity 生命周期(一) 转载请注明出处:http://blog.csdn.net/chenlinfeng772885775/article/details/53672919 ...

  3. Android Activity生命周期举例说明(图文)

    同学电话面试提及到Activity生命周期的详细说明,现整理如下: 转载请标明姓名及出处:大飞_Rflyee - http://blog.csdn.net/rflyee/article/details ...

  4. android activity生命周期_Android岗高频面试题合一集,看你能答出几题?

    前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...

  5. android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...

    Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用 ...

  6. Android Activity 生命周期和重要的相关函数(基础一)

    总结: 1.oncreate 2.onstart            可见但不交互 3.onrestart         从其他界面重新调转过来 4.onresume       可交互 5.on ...

  7. xamarin Android activity生命周期详解

    学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...

  8. Android Activity生命周期管理

    http://blog.csdn.net/thl789/article/details/6628463 本文描述Android中Activity的状态,Activity的状态转换,从而总结了Activ ...

  9. 04 Android Activity生命周期

    文章目录 1 Activity 生命周期 1.1 生命周期 1.2 Android 开发的规则 2 设备配置变化,Activity被销毁 3 进出停止态 3.2 进出停止态的过程 4 进出暂停态 4. ...

最新文章

  1. 小记,springboot项目中自己常用的logback配置文件
  2. PE文件重定位概念学习
  3. LTP--linux稳定性测试 linux性能测试 ltp压力测试
  4. Android 2.2
  5. 不可摸数http://acm.hdu.edu.cn/showproblem.php?pid=1999
  6. html点击按钮执行php代码,php代码在html文件里面执行的示例
  7. 【IntelliJ】IntelliJ IDEA常用设置及快捷键以及自定义Live templates
  8. ArrayList实现
  9. C# 正则表达式编写及验证方法
  10. STL源码剖析 迭代器的概念和traits编程技法
  11. r3 4300u r5 u_R5刀粒
  12. 互联网晚报 | 3月11日 星期五 |​ ​​商汤科技在深圳成立新公司,;微信支付电子小票上线...
  13. 使用Axis2方式发布webService实例说明
  14. 倒计时 1 天!第十六届开源中国开源世界高峰论坛日程曝光,邀您共同缔造开源创新模式!...
  15. 春运抢票靠加速包?试试这个 Python 开源项目吧
  16. python爬虫十二种方法_Python爬虫的N种姿势
  17. 错误 -source 1.6 中不支持 diamond 运算符的解决办法(已解决)
  18. io流之转换流InputStreamReader、OutputStreamWriter
  19. 【SSM】企业差旅管理系统-李兴华-专题视频课程
  20. DeepFace介绍

热门文章

  1. FineUI利用JS取控件的值
  2. Leetcode: Palindrome Numbers
  3. 学习《Building Applications with FME Objects》 之二 使用Sessions(会话)
  4. jmeter压测_jmeter压测学习2linux运行jmeter环境
  5. 有了java为什么还需要groovy_Groovy创始人:Java面临终结 Scala将取而代之
  6. linux shell 脚本 查找文件,Linux Shell在目录下使用for循环结合if查找文件的巧用
  7. my.cnf mysqld mysql_MySQL配置文件my.cnf详解【mysqld】模块(二)
  8. 地铁进出站是一站怎么办_高铁坐过站?别担心,这样能免费送回
  9. 11.QT事件机制源码时序分析(下)
  10. 彩色MT9V034摄像头 Bayer转rgb FPGA实现(转载)