原文:10天学安卓-第七天

我们上次学习了百度定位以及SharedPreferences的使用,不知道大家有没有注意到我们新加了一个方法:

    protected void onStop(){super.onStop();mLocationClient.stop();}

这个方法的作用是在界面停止的时候,同时停止百度定位功能。

联想到我们还有onCreate,那么这两个方法是做什么用的?是什么原理呢?

这就需要我们来了解一下Activity的生命周期。

Activity生命周期

Activity的整个生命周期有七个重要方法,分别是onCreate、onStart、onResume、onPause、onStop、onRestart、onDestroy,而且这七个方法在不同的状态下会有不同的触发时机,

1. Activity启动的时候,会依次执行onCreate、onStart和onResume

2. Activity失去焦点的时候,会依次执行onPause和onStop

3. Activity重新获得焦点的时候,会依次执行onRestart、onStart和onResume

4. Activity关闭的时候,会依次执行onPause、onStop和onDestroy

举个例子:

在APP已经启动的时候,如果按下Back键,那么就是第4种-关闭的情况,会依次执行onPause、onStop和onDestroy,

按下Home键,那么就是第2种-失去焦点的情况,会依次执行onPause和onStop,这个时候如果再次启动APP,就会是按照第3种-重新获得焦点的情况,会依次执行onRestart、onStart和onResume。

为了验证这一点,我们修改一下MainActivity.java,添加以下方法:

    @Overrideprotected void onPause(){Log.v( "WeatherAPP", "onPause" );super.onPause();}@Overrideprotected void onRestart(){Log.v( "WeatherAPP", "onRestart" );super.onRestart();}@Overrideprotected void onResume(){Log.v( "WeatherAPP", "onResume" );super.onResume();}@Overrideprotected void onStart(){Log.v( "WeatherAPP", "onStart" );super.onStart();}@Overrideprotected void onDestroy(){Log.v( "WeatherAPP", "onDestroy" );super.onDestroy();}

并且在onCreate和onStop方法内加入分别加入:

        Log.v( "WeatherAPP", "onCreate" );Log.v( "WeatherAPP", "onStop" );

然后运行程序,试着重复以上操作,并且在Logcat View中查看相应的Log。

这里说一点小技巧,点击Logcat View左上角的绿色加号,可以添加自定义的日志过滤器,我这里就是用了这样的功能。

在明白了Activity的生命周期后,它们在实际的APP中具体怎么应用?

那么,举一些例子。

1. 如果我们的预报天气APP需要在用户每次重新可见的时候都获取最新天气,那么调用获取天气相关的代码就需要放置到onResume方法中

2. 另外一种情况,我们的APP已经在前台可见了,这时候来了电话,就变得不可见了,之后挂了电话,又重新可见了,这个时候通常是不需要重新获取数据的,那么调用获取天气相关的代码就需要放置到onStart方法中

3. 最简单的情况,我们只需要在启动的时候获取天气,那么就只需要在onCreate方法中执行

所以呢,技术不是问题,一切都需要根据实际的需要来决定我们的程序应该如何实现。

以上是简单介绍了一下Activity的生命周期,大家可以在实践中慢慢摸索,并且以上介绍的都只是基础内容,高阶一点的内容我们将在之后的学习中慢慢接触。

在了解了生命周期后,是不是要对我们的APP做些修改呢,嗯,就按照第2种情况修改吧。

所要做的只是把下面这段代码从onCreate方法移到onStart中。

        String city = readCity();if( city != null && city.length() > 0 ){getWeather( city );}

看看结果是不是想要的呢。

想必练习到这里,大家也都累了,理论知识真是恼人,不过确实是我们所必须的,只有经过理论武装的知识才能发挥出最大作用。

今天就到这里吧,各位辛苦了。

明天是周末,会有很多的内容,请大家期待!

此系列文章系本人原创,如需转载,请注明出处 www.liuzhibang.cn

10天学安卓-第七天相关推荐

  1. 10天学安卓-第九天

    原文:10天学安卓-第九天 接着昨天的任务,我们今天实现左右滑动可以切换城市的功能. 这里就需要引入新的控件了,Android给我们提供了ViewPager,我们就使用这个,同时,显示天气的界面我们也 ...

  2. 10天学安卓-第二天

    10天学安卓-第二天 原文:10天学安卓-第二天 继续我们的学习. 相信我,第一天的工作是最为重要的,通过这些工作,我们把开发安卓所必须的环境.基础条件都配置好了,相信肯定遇到了很多问题,不过,根据我 ...

  3. 10天学安卓-第一天

    原文: 10天学安卓-第一天 说明1:本系列教程仅针对新手入门,高手勿入! 说明2:本系列教程均不考虑安卓版本低于4.0的情况. 说明3:本系列教程假定您了解一些编程的基础知识,对于Java语言略懂即 ...

  4. 10天学安卓-第六天

    经过前几天的学习,我们的天气预报程序已经可以把天气正常的呈现出来了,正如之前说的,现在的APP只能显示固定地区的天气,那么我们要怎样才能显示我们本身所在地的天气呢? Android定位 Android ...

  5. Python可以这样学(第七季:pillow扩展库图像编程)-董付国-专题视频课程

    Python可以这样学(第七季:pillow扩展库图像编程)-1738人已学习 课程介绍         董付国老师系列教材<Python程序设计(第2版)>(ISBN:978730243 ...

  6. CSDN开发者周刊第 21期:Wi-Fi 之父辞世,谷歌服务器再次全球宕机;Windows 10 将支持安卓应用

    CSDN开发者周刊:只为传递"有趣/有用"的开发者内容,点击 Star(CodeChina)! 本周热门项目 1.GTK 4.0开源工具包正式发布 赶在周五的发布会之前,GTK 开 ...

  7. 猿人学安卓逆向对抗比赛(1-5题)

    猿人学安卓逆向对抗比赛(1-5题) 题目大纲 第一题:java层加密 第二题:so层加密 第三题:so层加密带混淆 第四题:grpc 第五题:双向认证 题目大纲 题号 题目 一 java层加密 二 s ...

  8. [老老实实学WCF] 第七篇 会话

    原文:[老老实实学WCF] 第七篇 会话 老老实实学WCF 第七篇 会话 通过前几篇的学习,我们已经掌握了WCF的最基本的编程模型,我们已经可以写出完整的通信了.从这篇开始我们要深入地了解这个模型的高 ...

  9. 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?

    从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 从PRISM开始学 ...

最新文章

  1. linux进程间通信:system V 信号量和共享内存实现进程间同步
  2. Zuul:智能路由和过滤(译)
  3. UA MATH636 信息论8 线性纠错码
  4. windbg bp condition
  5. python中遍历结构可以是哪些数据类型_全!Python基础之原生数据类型、判断和循环、函数和文件操作合集...
  6. SQL Server 2016新特性:Live Query Statistics
  7. 第三章 Joomla!扩展开发:后端开发
  8. 第 8 章 MybatisPlus 扩展
  9. hdu 4717 The Moving Points(三分)
  10. 程序员如何做好自己的职业规划
  11. 最新windows7系统下载
  12. C语言实现(小米面试题)给定一个句子(只包含字母,空格,逗号和句号), 将句子中的单词位置反转,符号不变。(使用指针)
  13. 地方麻将吉林过蛋玩法算法
  14. [转]如何查找最新文献
  15. selenium 浏览器打开新标签页
  16. TensorFlow系列——一些api的使用场景及方式
  17. Spring Boot(三):RestTemplate提交表单数据的三种方法
  18. 学习算法第一天:算法初步
  19. 对于我们大冒险游戏的评论回复
  20. Manifest merger failed : Attribute meta-data#android.support.VERSION@value..

热门文章

  1. arcgis属性表选择两个条件_ARCGIS关联属性表(转)
  2. android 手机铃声设置铃声设置,Android 修改系统来电铃声
  3. pdf内容怎么复制到word文档里_pdf文件怎么放到word里?这招实在是太好用了
  4. delphi trichviewedit 设置一行的段落_HTML中的文本与段落(3)
  5. matlab错误打印,MATLAB中数据输出格式出现错误?
  6. 支付宝php rsa签名验签工具,alipay rsa2 签名验证
  7. 为你的应用程序添加动态Java代码
  8. Java讲课笔记11:构造方法与this关键字
  9. SDOI2016R2(怎么可能是解题报告)
  10. 2017.7.27 bill的挑战 失败总结