深入Activity生命周期(一)

简介: 刚学Android的同学必须要掌握的四大组件是activity service broadcastReceiver provider,而activity是有界面的,需要在不同的阶段做不同事情。因此深刻理解activity的生命周期至关重要。

    刚学Android的同学必须要掌握的四大组件是activity service broadcastReceiver provider,而activity是有界面的,需要在不同的阶段做不同事情。因此深刻理解activity的生命周期至关重要。大家都很想理解这其中奥秘,下面就分3篇来深入探寻activity生命周期。

   下面这张图应该大家都会熟悉的:

    当一个Activity启动的时候 首先会调用onCreate()方法,一般我们在这里完成一些初始化的工作;

    然后调用onStart()方法,这个方法只能被父类调用,如果手动调用则会出异常。onStart()方法必须是在onCreate()之后被调用或者Acitvity被stopped以后才被父类调用。

           通常是都是在onCreate()方法或者是onReStart()方法后执行。因为如果Activity不存在,在onCreate()以后必须要onStart(),Activity才能起来,而如果是Activity

           被stop了以后,Activity需要重新启动,那么由系统调用onStart()方法。

   然后调用onResume()方法,这时候Activity的是完全可视的,处于与用户交互状态。

   如果这时候有其他的应用弹出来,遮住了Activity的部分界面,那么就会调用onPause()方法,暂停Activity。

   如果其他应用完全的把Activity遮住了以后,那么就会调用onStop方法。

   如果系统系统回收了Activity,或者调用finish()方法,那么就会调用onDestroy()方法,该Activity就要被完整的回收了,释放资源和空间。

 

   当然图中其中还有其他的几种分支情况,没有全部都说到。

   下面以一个实际例子来说明Activity生命周期:

   假设现在你打算玩 愤怒的小鸟,安装好apk,点击图标,这时候Activity要调用onCreate()方法,在这个方法中完成初始化UI控件,由于Activity是UI线程,顺序执行onStart()方法,这个方法中要做一些与用户交互界面需要准备的数据以及图像的工作,万事俱备了,执行onResume()方法,这时候你看到的是愤怒的小鸟的界面,

     

    进入的游戏中,今天你手很热,都过了第8关了,已经发送了第一支小鸟了,眼见就要创新记录了,

    这时候很不巧,你的女朋友给你发了一条短信问你:hi,在干吗呢?。手机的顶部就会有一条提示,把顶部的提示拉下来一半,没有完全挡住 愤怒的小鸟 的界面 ,发现能完全看得到信息内容了,但是然后你决定不理她,继续玩,把顶部的提示放回去,又过了一关。

         

           这个过程就会调用onPause()方法。然后然后调用了onResume()方法。

    这时候女朋友发现你没有回信息,于是给你打电话过来了,系统会自动的优先电话程序给你切到打入电话,然后出现接电话的界面,那么这个过程中会依次的调用onPause(),和onStop()方法。

    当你打完电话了(在电话中声泪俱下 痛哭流涕 发自内心认错 保证以后一定及时回复信息,并且下午带她去吃大餐),按home键切回来愤怒的小鸟时,发现程序还是在第9关,而且也是在才发射了一只小鸟的状态。

 

 

  具体分析生命周期流程,有以下两种:

         1)  如果系统没有回收掉Activity 愤怒的小鸟,那么系统经过的流程是onRestart(),onStart(),onResume(),然后就是你看到的界面了。         

         2) 如果你打电话的时候很长,系统认为Activity需要回收的时候就会把 愤怒的小鸟回收掉,释放资源,这时候当你按home键切回来愤怒的小鸟,系统会调用onCreate(),

                onStart(),onResume(),然后就是你看到的Activity界面了。

    打完电话以后,考虑到要马上动身带她去吃大餐,决定关闭程序,你选择了menu,退出按钮,这时就会调用finish(),然后onDestroy(),就是一个完整的退出了。

  注:

   当然事实上的愤怒的小鸟不是我说的这么简单的,里面有更复杂也有更多的图像处理,我只是单从生命周期以自己的理解给大家做个分享,别喷。。。

   有说的不对的地方,请给我留言,谢谢。

           

  

 

 

 

 

 

 

 

 

目录
相关文章
|
人工智能 监控 算法
探索软件测试的未来:AI与自动化的融合
随着人工智能(AI)技术的飞速发展,软件测试领域正迎来一场革命。本文将深入探讨AI如何与自动化测试相结合,提升测试效率和准确性,同时分析面临的挑战和机遇。我们将通过具体案例,展示AI在自动化测试中的应用,并预测未来发展趋势。
238 31
|
机器学习/深度学习 人工智能 自动驾驶
基于深度学习的图像识别技术在自动驾驶汽车中的应用
【5月更文挑战第25天】 在现代科技的迅猛发展中,自动驾驶汽车作为智能交通系统的重要组成部分,其研发进程受到了全球范围内的高度关注。自动驾驶汽车的核心之一是能够准确识别和处理来自环境的大量信息,而图像识别技术在此过程中扮演了不可或缺的角色。本文将深入探讨基于深度学习的图像识别技术如何优化自动驾驶汽车的视觉感知能力,从而提升其在复杂环境下的安全性与可靠性。我们将首先回顾深度学习技术的基本原理及其在图像处理中的关键作用,接着分析当前自动驾驶领域中的挑战以及图像识别技术的解决方案,最后通过案例研究展示该技术如何在实际中得到应用并推动自动驾驶技术的发展。
面试官:如何关闭一个 TCP 连接?
今天聊一个比较轻松的问题:如何关闭一个 TCP 连接? 可能大家第一反应是「杀掉进程」不就行了吗? 是的,这个是最粗暴的方式,杀掉客户端进程和服务端进程影响的范围会有所不同: 在客户端杀掉进程的话,就会发送 FIN 报文,来断开这个客户端进程与服务端建立的所有 TCP 连接,这种方式影响范围只有这个客户端进程所建立的连接,而其他客户端或进程不会受影响。 而在服务端杀掉进程影响就大了,此时所有的 TCP 连接都会被关闭,服务端无法继续提供访问服务。
|
人工智能 运维 搜索推荐
软件定制开发与标准化产品的比较及选择
随着信息技术的不断发展,软件已经成为企业运营中不可或缺的一部分。而在选择软件时,企业用户通常面临两个选择:软件定制开发和标准化产品。软件定制开发和标准化产品各有其优缺点,以下是对两者的比较和选择:
|
移动开发 小程序 JavaScript
手把手教你接入微信支付
手把手教你接入微信支付
1887 0
手把手教你接入微信支付
|
机器学习/深度学习 监控 搜索推荐
推荐系统中的偏差:主要挑战和近期突破
虽然这些系统在帮助用户发现新内容或产品方面非常有用,但它们也存在着各种偏差,可能导致效果非常差的推荐结果。今天围绕推荐系统的主要研究之一就是如何去除偏差。 在本文中,我们将深入探讨5种最普遍的推荐系统偏差,并了解一些来自谷歌、YouTube、Netflix、快手等公司的最新研究成果。
650 0
|
机器学习/深度学习 人工智能 运维
如何通过AI 全面提升运维效率?选型宝分享AIOps实战案例
前言 运维,是企业IT最基础的工作,也是痛点、槽点最多的工作。海量的数据、频繁的报警、艰难的排障、无情的投诉,足以让运维工程师们感到崩溃和绝望…… Gartner在ITOA (IT Operations Analytics IT运营分析)的基础上,提出了AIOps的概念。
3397 0
|
容器 .NET 开发框架
.net core 注入中的三种模式:Singleton、Scoped 和 Transient
我们都知道在 Startup 的 ConfigureServices 可以注入我们想要的服务,那么在注入的时候有三种模式可以选择,那么我们在什么时候选择什么样的模式呢? 在讲注入模式之前,我觉得很有必要了解服务生存期的概念! 服务生存期:ASP.NET Core 提供了一个内置的服务容器 IServiceProvider 负责管理服务的生命周期,从被依赖注入容器创建开始(就是将服务注入到你要使用的类的构造函数中),然后框架负责创建依赖关系的实例,并在不再需要时对其进行处理(就是说等我们调用完服务时,容器会自己去对注入的服务进行释放)。
2065 0
|
JavaScript 前端开发
微前端之 MicroApp 介绍和基础使用
微前端之 MicroApp 介绍和基础使用
3382 0
|
缓存 前端开发 算法
Ant Design 5.0 正式发布!
Ant Design 5.0 正式发布!
863 0