【Android基础】Activity生命周期

前言:

在网站开通以来一直想着写一些Android基础知识分享给大家,但是有时候又觉得怕写不好误导了大家学习Android,思前想后觉得还是去Android官网看看,发现在Android官网上其实就能学习到很多知识,并且最新的知识他都会及时的更新,所以决定按照官网带领大家学习Android知识,在中间会穿插本人在做项目时的一些体会和总结。

应用程序的入口:

所有学习Android的基本上都从学习Activity开始,因为它是Android的大门,相当于Java程序的入口函数main()。当你查看一个Java项目时你肯定想到的是从它的入口函数main()开始,一步一步的深入去看这个项目的逻辑是怎么展开的,查看Android项目也不例外,但是它的入口不是main函数,而是主Activity类。在Activity中有一些特定的方法称为生命周期函数(也叫回调函数),这些函数不需要你去调用它,而是会自动的被Android系统调用,Android系统会根据用户的操作调用这些生命周期函数,比如用户点击了应用图标来启动应用程序,Android系统就会调用应用程序中主Activity的onCreat()方法,用户按返回键则会触发onPause()函数,你所需要做的就是利用这些生命周期函数,把你的逻辑写在恰当的位置。

理解Activity生命周期:

怎么利用生命周期函数?首先是要理解Activity的生命周期。在Android官网上有一张下面的图片,它绘制的就是一个Activity生命周期金字塔。

在上图中每一个生命周期中的状态(Created、Started、Resumed、Paused、Stoped、Destroyed)可以看做是组成金字塔的每一个台阶,这些台阶是通过一些生命周期函数才能到达的。在用户点击应用图标启动应用程序的时候是从金字塔最底层,经过onCreat()、onStart()、onResume()这几个函数一步一步走向金字塔顶峰,这几个函数都是Android系统帮你调用的,不需要你处理,你要做的是在这几个函数中做好程序的初始化工作。当到达金字塔顶部Resumed状态时应用程序获取了最大的前台运行权限,用户才能与应用程序进行交互,比如进行聊天、点击应用程序的其他功能等。当用户离开应用程序的时候Android系统会调用Activity的onPause()、onStop()、onDestroy()方法,一步一步从金字塔顶层退下来,在从顶层退下来的时候也可以从新回到顶层。

理解三个状态:

Activity中的Created、Started、Resumed、Paused、Stoped、Destroyed这七个状态只有三个状态可以静止存在一段时间,其他的状态很快就会过去。这三个状态是:

  • Resumed状态:

在这个状态下Activity处于前台活动状态,也就是可以和用户进行交互的状态,也叫运行状态。

  • Paused状态:

在这个状态Activity界面部分被其他Activity遮挡,无法响应用户的所有操作。

  • Stopped状态:

在这个状态Activity完全被隐藏,对于用户是不可见的状态,应用程序在后台。进入这个状态时,Activity的状态信息要被保留下来。

对于其他状态只是短暂的停留,不如系统调用onCreate()后,它迅速调用onStart(),紧接着onResume()。

生命周期注意事项:

对于Activity的生命周期在实际项目中的怎么应用你需要记住以下几点:

  • 在用户用你的应用程序时,如果有来电或者用户切换到其他应用,你的应用程序不能出现异常退出,比如很严重的崩溃(crash)或者无响应(ANR);
  • 在用户不再使用你的应用时,及时释放掉你应用程序占用的系统资源,比如在程序进入后台时要停掉一些不必要的线程;
  • 在用户离开你的应用的时候要保存用户当前的状态,再用户再次回到你的应用的时候恢复之前的状态;
  • 在进行横竖屏切换的时候要满足上面的第一和第三条规则。

以上是Activity生命周期的基本知识,下一篇文章将会结合代码讲解Activity生命周期函数。如果大家有什么疑问和问题请关注我的微信公众号:coder_online给我反馈。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-06-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏developerHaoz 的安卓之旅

手把手教你从零开始做一个好看的 APP - Day two

本文为 手把手教你从零开始做一个好看的 APP - Day two ,如果想看该系列的其他文章,请点击以下连接

583
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

Android7.0适配心得

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://www.devio.org) Android7.0发布已经有一个多月了,Andro...

3485
来自专栏WeTest质量开放平台团队的专栏

了解和分析iOS Crash

原文链接:http://wetest.qq.com/lab/view/404.html

1092
来自专栏Golang语言社区

游戏服务器框架 Leaf/go

Leaf 是一个使用 Go 语言开发的开源游戏服务器框架,注重运行效率 并追求极致的开发效率。Leaf 适用于几乎所有的游戏类型。其主要的特性: * 良好的使用...

5324
来自专栏Matthew

5分钟教你打造一个秒开的 Android App

近日在开发过程中,发现每次点击 app 从桌面启动都有一个在桌面明显的等待时间,机型越低端的越明显,冷启动优化看来已经势在必行,所以怒而一顿研究再解决之。

1.2K1
来自专栏乐享123

How to Improve Performance Your Cmd by Parallel

1113
来自专栏QQ音乐技术团队的专栏

浅谈 Android 自定义锁屏页的发车姿势

一、为什么需要自定义锁屏页   锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致。多少人曾经在无聊的...

2999
来自专栏Golang语言社区

用Go语言写一个Windows的外挂(上)

本人在一家互联网金融公司上班,对于一家互联网金融公司,最基本的功能就是客户入金和出金,而出金的稳定性是很重要的,出金不畅容易导致投资人恐慌,本文讲的是出金,出金...

1462
来自专栏Vamei实验室

安卓第三夜 概念漫游(上)

拿起一个手机,总是满屏的应用图标。点击图标,选择应用,玩一把游戏,刷一下微博,写一篇日记。“叮咚”一声,邮件应用提醒有一封新来的邮件。在安卓里,眼花缭乱的应用承...

1858
来自专栏程序员互动联盟

android apk 防止反编译技术第四篇-对抗JD-GUI

又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊。好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法。前三篇我们讲了加壳技术、运...

3286

扫码关注云+社区