极力推荐文章:欢迎收藏

Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. Activity 生命周期 简介
  2. Activity 必须在AndroidMainfest.xml 中注册
  3. 启动Activity 的方法
  4. 启动带返回值的Activity
  5. Activity结束 方法
  6. Activity状态保存,恢复的方法
  7. 面试中经常问到的例子

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 常见的四种生命周期状态如下:

  1. Active 运行状态
  2. Pause 暂停状态
  3. Stop 停止状态
  4. 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 扫描到,可以显示在LauncherIcon列表上,如果去掉此Action,则无法在Launcher 种查看到此appIcon

<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,简述一下其生命周期?

    1. 首先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----
    1. 点击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----
    1. 结束 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 使用详解的更多相关文章

  1. Activity知识点详解

    Activity知识点详解 一.什么是Activity 官方解释: The Activity class is a crucial component of an Android app, and t ...

  2. Android application 和 activity 标签详解

    extends:http://blog.csdn.net/self_study/article/details/54020909 Application 标签 android:allowTaskRep ...

  3. Android组件系列----Activity组件详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  4. Android基础之Activity launchMode详解

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Activity的lauchmode,是基础的属性,但也是App优化必须掌握的知识,它约束了Acti ...

  5. Android之路-------Activity的详解

    前言 由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字. 今天LP的任务完成 ...

  6. Android Fragment与Activity通讯详解

    与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可 ...

  7. 转 Android Activity之间动画完整版详解

    标签:Android Activity动画详解 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mzh3344258.blog.5 ...

  8. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

  9. Android中Activity运行时屏幕方向与显示方式详解

    现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...

随机推荐

  1. 基于百度云的OCR识别(Python)

    2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上. 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊 ...

  2. MyBatis从入门到精通(六):MyBatis动态Sql之if标签的用法

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用if标签生成动 ...

  3. IDEA中Maven依赖包下载不了的问题解决方案汇总

    第一种方案: 第二种方案:下面的几个不要选择. 第三种方案:可能是某一个 dependency 依赖无法下载,导致整个项目都报错 打开具体的报错的maven项目的pom.xml.试着去删除一些 dep ...

  4. c++书籍推荐《C++编码规范》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++编程规范:101条规则.准则与 实践>:良好的编程规范可以改善软件质量,缩短上市时间,提升团队效率,简化维护工作.在<C++编程规范 ...

  5. 简单说一下SS的原理

    假设有主机A和B还有C.主机A是客户机,就是你的电脑,主机B是服务器,也就是位于日本的那台电脑.主机C是你需要访问的网站.在没有SS的情况下,数据传输的流程是:A-->C.在有SS的情况下,概括 ...

  6. Spark 中的机器学习库及示例

    MLlib 是 Spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib 由一些通用的学习算法和工具组成,包括分类.回归.聚类.协同过滤.降维等,同时还包括底层的优化 ...

  7. Linux日志系统分析:rsyslog、syslog和klog

    参考博客: https://blog.csdn.net/lidonghat/article/details/55004280 https://blog.csdn.net/u012247418/arti ...

  8. servlet的几个函数

    request.getContextPath   上下文,例如 /bignews1 (自带 “ / ”) request.getScheme() 协议,例如HTTP request.getServer ...

  9. ESXI好好研究

    之前几周在公司要搭建一个平台,因为服务器不够用,所以需要要一台服务器上装虚拟机.有人说用ESXI装虚拟机,并且不用装操作系统,我当时还纳闷儿了,不装操作系统,直接装虚机?这里我有点孤陋寡闻了,其实ES ...

  10. cola-ui的使用

    [toc] > 官方:[http://www.cola-ui.com](http://www.cola-ui.com) > > 教程位置:[http://www.cola-ui.co ...