Activity 使用详解

极力推荐文章:欢迎收藏
Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
- Activity 生命周期 简介
- Activity 必须在AndroidMainfest.xml 中注册
- 启动Activity 的方法
- 启动带返回值的Activity
- Activity结束 方法
- Activity状态保存,恢复的方法
- 面试中经常问到的例子
Activity 是Android 最基本的四大组件之一(Activity 活动,Service 服务,ContentProvider 内容提供者,BroadcastReceiver 广播),Activity主要负责与用户进行交互,是每位Android 开发必须掌握的知识点。
1. Activity 生命周期 简介
首先我们需要了解一下Activity的继承关系。
Activity 继承关系
Activity 继承关系如下:
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
理解完Activity的继承关系后,我们开始了解Activity的声明周期,Activity的生命周期直接影响到与用户的交互,此声明周期很重要。
Activity 生命周期
Activity 生命周期图如下:

在代码中 Activity生命周期回调方法
Activity生命周期回调方法如下:
// Activity 创建方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "----onCreate----");
setContentView(R.layout.activity_methods);
}
// Activity 在最新任务列表中打开时候会走此方法
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "----onRestart----");
}
// Activity 在onCreate 或者 onRestart之后执行
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "----onStart----");
}
// 正在与用户交互的界面
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "----onResume----");
}
// 被其他与用户交互的Activity 部分覆盖
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "----onPause----");
}
// 被其它与用户交互的Activity 全部覆盖
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "----onStop----");
}
// Activity 销毁时候调用此方法
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "----onDestroy----");
}
Activity 4 种 生命周期状态
Activity 常见的四种生命周期状态如下:
- Active 运行状态
- Pause 暂停状态
- Stop 停止状态
- Killed 消亡状态
2. Activity 必须在 AndroidMainfest.xml 中注册
Activity 是四大组件之一,Android规定四大组件必须在AndroidMainfest.xml 中注册,Activity 如果不注册,则会引起 App Crash 报错。
ActivityNotFoundException
如Activity不在AndroidMainfest.xml中注册,则app将会报错,报错主要异常信息如下 :
ActivityNotFoundException
例如以下报错信息:
//提示未在 AndroidMainfest.xml 中找到Activity类的声明
android.content.ActivityNotFoundException:Unable to find explicit activity class
//具体类名,包名如下:
{com.wj.utils/com.wj.utils.basewidget.BaseButtonMethods};
//需要在AndroidManifest 中声明
have you declared this activity in your AndroidManifest.xml?

Activity 注册方法如下:
<manifest ... >
<application ... >
<activity android:name=".BaseButtonMethods" />
...
</application ... >
...
</manifest >
常用Action 标签
android.action.MAIN :
表示是当前App的入口 main 方法类。
android.intent.category.LAUNCHER:
表示 此Action 会被Launcher 扫描到,可以显示在Launcher的Icon列表上,如果去掉此Action,则无法在Launcher 种查看到此app的Icon。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
3. 启动Activity 的方法
显示启动
Intent intent = new Intent(ActivityMethods.this, OtherActivity.class)
startActivity(intent);
隐式启动
Intent intent = new Intent("string_action");
// intent.setAction("string_action");
startActivity(intent);
4. 启动带返回值的Activity
启动带返回值的Activity方法
Intent intent = new Intent();
intent.setClass(ActivityMethods.this, OtherActivity.class);
startActivityForResult(intent, mRequestCode);
处理返回值的回调方法
// 获取 Activity 返回结果的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == mRequestCode && resultCode == mResultCode) {
String result = data.getStringExtra("str_set_result");
Toast.makeText(this, "result :" + result, Toast.LENGTH_SHORT).show();
}
}
被启动Activity设置返回值的方法
int resultCode = 101;
Intent intent = new Intent();
intent.putExtra("str_set_result", "带返回结果的Activity");
setResult(resultCode, intent);
5. Activity结束 方法
如果想结束掉当前Activity ,可以调用一下方法
//1.直接调用finish方法 ,结束当前Activity
finish();
//2.根据请求码结束Activity
finishActivity(int requestCode);
6. Activity状态保存,恢复的方法
当Activity 异常退出时候,Activity 会自动保存一些数据,但是,如果是app重要数据,还请在代码中手动保存Bundle类型的数据,防止Activity保存的数据不理想。
Activity 状态保存与恢复
Activity 状态保存与恢复的周期图如下:

Activity 状态保存与恢复的回调方法
Activity 状态保存与恢复的回调方法如下:
// Activity 恢复数据的方法,经常在 oncreate 方法中恢复数据
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "----onRestoreInstanceState----");
}
// Activity 保存数据的方法,经常在 onPause 方法中保存数据
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
Log.i(TAG, "----onSaveInstanceState----");
}
7. 面试中经常问到的例子
Activity A 启动 Activity B, 然后再返回A,简述一下其生命周期?
- 首先
A启动的声明周期如下:
- 首先
01-02 21:25:22.357 21225-21225/com.android.program.programandroid I/ActivityMethods wjwj:: ----onCreate----
01-02 21:25:22.396 21225-21225/com.android.program.programandroid I/ActivityMethods wjwj:: ----onStart----
01-02 21:25:22.402 21225-21225/com.android.program.programandroid I/ActivityMethods wjwj:: ----onResume----
- 点击
A中的Button,跳转到B,此时声明周期关系如下:
- 点击
01-02 21:28:30.617 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onPause----
01-02 21:28:30.723 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onCreate----
01-02 21:28:30.729 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onStart----
01-02 21:28:30.738 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onResume----
01-02 21:28:31.320 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onStop----
- 结束
B,返回A,生命周期如下:
- 结束
01-02 21:29:38.646 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onPause----
01-02 21:29:38.668 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onRestart----
01-02 21:29:38.672 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onStart----
01-02 21:29:38.674 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onResume----
01-02 21:29:39.058 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onStop----
01-02 21:29:39.059 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onDestroy----
总结:
Activity A 启动 Activity B, 简述一下其生命周期? 大致流程如下图:

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

Activity 使用详解的更多相关文章
- Activity知识点详解
Activity知识点详解 一.什么是Activity 官方解释: The Activity class is a crucial component of an Android app, and t ...
- Android application 和 activity 标签详解
extends:http://blog.csdn.net/self_study/article/details/54020909 Application 标签 android:allowTaskRep ...
- Android组件系列----Activity组件详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Android基础之Activity launchMode详解
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Activity的lauchmode,是基础的属性,但也是App优化必须掌握的知识,它约束了Acti ...
- Android之路-------Activity的详解
前言 由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字. 今天LP的任务完成 ...
- Android Fragment与Activity通讯详解
与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可 ...
- 转 Android Activity之间动画完整版详解
标签:Android Activity动画详解 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mzh3344258.blog.5 ...
- Android中Intent组件详解
Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...
- Android中Activity运行时屏幕方向与显示方式详解
现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...
随机推荐
- 基于百度云的OCR识别(Python)
2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上. 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊 ...
- MyBatis从入门到精通(六):MyBatis动态Sql之if标签的用法
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用if标签生成动 ...
- IDEA中Maven依赖包下载不了的问题解决方案汇总
第一种方案: 第二种方案:下面的几个不要选择. 第三种方案:可能是某一个 dependency 依赖无法下载,导致整个项目都报错 打开具体的报错的maven项目的pom.xml.试着去删除一些 dep ...
- c++书籍推荐《C++编码规范》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++编程规范:101条规则.准则与 实践>:良好的编程规范可以改善软件质量,缩短上市时间,提升团队效率,简化维护工作.在<C++编程规范 ...
- 简单说一下SS的原理
假设有主机A和B还有C.主机A是客户机,就是你的电脑,主机B是服务器,也就是位于日本的那台电脑.主机C是你需要访问的网站.在没有SS的情况下,数据传输的流程是:A-->C.在有SS的情况下,概括 ...
- Spark 中的机器学习库及示例
MLlib 是 Spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib 由一些通用的学习算法和工具组成,包括分类.回归.聚类.协同过滤.降维等,同时还包括底层的优化 ...
- Linux日志系统分析:rsyslog、syslog和klog
参考博客: https://blog.csdn.net/lidonghat/article/details/55004280 https://blog.csdn.net/u012247418/arti ...
- servlet的几个函数
request.getContextPath 上下文,例如 /bignews1 (自带 “ / ”) request.getScheme() 协议,例如HTTP request.getServer ...
- ESXI好好研究
之前几周在公司要搭建一个平台,因为服务器不够用,所以需要要一台服务器上装虚拟机.有人说用ESXI装虚拟机,并且不用装操作系统,我当时还纳闷儿了,不装操作系统,直接装虚机?这里我有点孤陋寡闻了,其实ES ...
- cola-ui的使用
[toc] > 官方:[http://www.cola-ui.com](http://www.cola-ui.com) > > 教程位置:[http://www.cola-ui.co ...