网站首页 > 教程文章 正文
Android四大组件分别为Activity(活动)、Service(服务)、ContentProvider(内容提供者)和BroadcastReceiver(广播接收器)。
今天我们先来简单了解下Activity。
什么是Activity呢?
Activity字面意思是“活动”,是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话、照相、发邮件或者是浏览地图等。每个Activity会提供一个可视的窗口,类似于Windows中的Window,每个Activity都有自己的一个Window。一般情况下这个窗口会覆盖整个屏幕,但在某些情况下也会出现一些比屏幕小的窗口飘浮在另外一个窗口上面。
一个Android应用程序通常由多个相互紧密联系的Activities组成,其中有一个Activity在应用中被指定成“主”Activity,用户第一次运行应用所显现的。为了能执行不同的行为每个Activity可以运行另一个Activity。每次一个新的Activity开启,上一个Activity被停止,系统保留Activity在栈中(回退栈),当一个新activity运行,它被推入栈顶并让用户得到焦点。回退栈遵守“后进,先出”的栈机制,所以,当用户在当前的Activity上按了返回按钮,它从栈顶弹出(被销毁)并且上一个Activity恢复到当前。
如何创建一个Activity呢?
在Android 中创建一个Activity 是很简单的事情,编写一个继承自 android.app.Activity类的 Java类并在 AndroidManifest.xml配置文件中声明即可。为了呈现一个我们想要的界面,这还远远不够,我们还需要实现Activity类中的方法。
Activity中有两个重要的方法是几乎所有的子类都要实现的:
1. onCreate():这个是必须实现的函数,在其中做初始化工作。最重要的是你必须在此方法中调用setContentView()方法来设置当前Activity的界面。你还可以使用findViewById()方法检索一些在当前布局文件中已经定义的控件,然后你就可以通过代码在程序中进行配置了。
2. onPause():这个虽然很重要,但也不是必须要实现的。此方法在用户离开Activity时被调用(这一般并不表示Activity要被销毁了)。在这个方法中,你一般需要提交那些需保存状态的数据(因为用户可能不再返回到这个Activity)。
以上两个方法是Activity生命周期里的方法。我们可以通过看下图来了解下Activity的生命周期。
图1 Activity生命周期
1. onCreate():生命的起点,“入口”方法。一般来说用以指定UI界面,对类变量进行初始化。onCreate 方法有一个参数,该参数可以为空(null),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。由于onRestoreInstance的调用时间不明确,因此也可以在onCreate中对onSaveInstance中保存的bundle数据进行恢复。
2. onStart():可见阶段,与onStop()相反的工作,该方法的触发表示所属Activity将被展现给用户。由于调用onStart()时,应用有可能是经过很长时间后台后重新显示,因此比较适合检查某些系统资源是否准备妥当,比如网络连接是否OK,GPS是否可用等。
3. onResume():可见阶段。恢复在onPause()中暂停或释放的资源。比如动画,Camera以及需要更新的Adapter。
4. onPause():当一个正在前台运行的Activity因为其他的Activity前台运行而转入后台运行的时候触发该方法。此时的Activity不可与用户进行交互。在这个方法中,我们可以停止占用CPU(动画),保存一些不太耗时的资源(不做耽误时间的工作,比如保存数据库之类),释放部分系统资源(Camera, sensors及耗电的工作)。
5. onStop():当一个Activity不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个Activity,而不会触发 onStop()方法。所以保存状态信息的操作应该在onPause()时做,而不是onStop()时做。
6. onRestart():当处于停止状态的Activity需要再次展现给用户的时候,触发该方法。
7. onDestory():当Activity销毁的时候,触发该方法。和onStop()方法一样,如果内存紧张,系统会直接结束这个Activity而不会触发该方法。
以上是今天的全部内容。下篇我们将通过实例来讲解Activity的生命周期。
谢谢大家。
微价值网(公号vjiazhi),专注移动互联网、App推广、盈利以及Android/iOS等技术基础培训。
我们的微价值,就是你的大价值!
欢迎投稿Android/iOS技术类文章,可以发到谋哥邮箱1351231599@qq.com,谢谢。
猜你喜欢
- 2025-03-19 10款你可能不知道的Android开发辅助工具
- 2025-03-19 2021年四大流行Android手机自动化测试工具,全在这里了
- 2025-03-19 安卓16锁屏组件将回归! 更多信息展示,不用解锁即可浏览!
- 2025-03-19 如何查看Android设备中的组件和控件
- 2025-03-19 Android历史版本以及最新版本:Android 15
- 2025-03-19 「字节跳动测试开发面经」一二三面+hr面+超级多干货+复习资料
- 2025-03-19 技术分享 | 想做App测试就一定要了解的App结构
- 2025-03-19 大厂面试原来是这样,这份面试攻略你值得拥有!
- 2025-03-19 我的第一个鸿蒙app,以及所见内容(ZT)
- 2025-03-19 10款可以直接拿来用的Android UI工具
- 05-11阿里开源MySQL中间件Canal快速入门
- 05-11MyBatis插件开发实战:手写一个分页插件
- 05-11Flask数据库——SQLAlchemy
- 05-11MySQL 到 Hazelcast Cloud 实时数据同步实操分享
- 05-11sqlmap 详解
- 05-11一篇文章让你学会Elasticsearch中的查询
- 05-11Mysql性能优化这5点你知道吗?简单却容易被初学者忽略!
- 05-11Spring Boot 实现 MySQL 读写分离技术
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)