一、Activity 概览

Activity是Android最基本的四大组件之一(Activity 活动,Service 服务,ContentProvider内容提供者,BroadcastReceiver 广播),Activity主要负责与用户进行交互,是每位Android开发必须掌握的知识点。四大组件必须在AndroidMainfest.xml 文件中声明。

Activity 继承关系如下:
java.lang.Object↳    android.content.Context↳    android.content.ContextWrapper↳    android.view.ContextThemeWrapper↳    android.app.Activity

理解完Activity的继承关系后,我们开始了解Activity的声明周期,Activity的生命周期直接影响到与用户的交互,此生命周期很重要。

二、Activity 生命周期

Activity 生命周期图如下:

在代码中Activity生命周期回调方法如下:

    // Activity 创建方法@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.i(TAG, "----onCreate----");setContentView(R.layout.activity_methods);}// Activity 在最新任务列表中打开时候会走此方法@Overrideprotected void onRestart() {super.onRestart();Log.i(TAG, "----onRestart----");}// Activity 在onCreate 或者 onRestart之后执行@Overrideprotected void onStart() {super.onStart();Log.i(TAG, "----onStart----");}// 正在与用户交互的界面@Overrideprotected void onResume() {super.onResume();Log.i(TAG, "----onResume----");}// 被其他与用户交互的Activity 部分覆盖@Overrideprotected void onPause() {super.onPause();Log.i(TAG, "----onPause----");}// 被其它与用户交互的Activity 全部覆盖@Overrideprotected void onStop() {super.onStop();Log.i(TAG, "----onStop----");}// Activity 销毁时候调用此方法@Overrideprotected void onDestroy() {super.onDestroy();Log.i(TAG, "----onDestroy----");}

根据不同的生命周期状态,Activity可以分为以下四种生命周期状态

  • 1.Active 运行状态

  • 2.Pause 暂停状态

  • 3.Stop 停止状态

  • 4.Killed 消亡状态

三、 Activity的注册方法

Activity是四大组件之一,Android规定四大组件必须在AndroidMainfest.xml 中注册,Activity如果不注册,则会引起 App Crash。比如以下常见的ActivityNotFoundException。

例如以下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的时候必须在AndroidMainfest.xml中注册,注册方法如下:

<manifest ... ><application ... ><activity android:name=".BaseButtonMethods" />...</application ... >...
</manifest >

四、App的MainActivity

一个App会有多个Activity,那么我们如何知道哪个Activity是 Main Activity呢?
其实Android 是通过android.action.MAIN 标签来区别当前App的入口 Main Activity类。

另外 一半跟随着android.action.MAIN标签的地方,同时还有
android.intent.category.LAUNCHER这个标签,它表示 此Action 会被Launcher扫描到,并可以显示在Launcher的app list列表中。如果去掉此Action标签,则无法在Launcher中查看到此app的图标。

常见举例如下:

<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>

五、Activity 的启动方法

Activity 的启动方法大致分显示启动、隐式启动、带返回参数启动三种。

1. 显示启动

显示启动常用于app 内部Activity 的启动,使用方法如下:

        Intent intent = new Intent(ActivityMethods.this, OtherActivity.class)startActivity(intent);

2. 隐式启动

隐式启动即可以调用App内部Activity ,也可以调用其他过滤到包含启动Action 的Activity。使用方法如下:

Intent intent = new Intent("string_action");//或者分开设置Action也可以// intent.setAction("string_action");startActivity(intent);

3. 启动带返回值的Activity

开发过程中我们经常需要启动一个Activity ,然后返回一些数据给启动的Activity,这时候,使用以下启动带返回值的Activity 是最合适的方法。使用方法举例如下:

- 1.启动要返回数据的Activity

  ... ...// 1.启动要返回数据的ActivityIntent intent = new Intent();intent.setClass(ActivityMethods.this, OtherActivity.class);startActivityForResult(intent, mRequestCode);... ...//    2.获取并处理 启动返回Activity 返回结果携带的数据@Overrideprotected 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();}}

- 2. 设置并返回 Bundle 数据类型的数据给启动的Activity

int resultCode = 101;Intent intent = new Intent();intent.putExtra("str_set_result", "带返回结果的Activity");setResult(resultCode, intent);

六、Activity结束 方法

如果想结束掉当前Activity ,可以调用一下方法

 //1.直接调用finish方法 ,结束当前Activityfinish();//2.根据请求码结束ActivityfinishActivity(int requestCode);

七、 Activity状态保存,恢复的方法

当Activity异常退出时候,Activity会自动保存一些数据。为了安全起见,如果是App重要的数据,还请在代码中手动保存Bundle类型的数据,防止Activity自动保存的数据没有保存完整。

Activity 状态保存与恢复的周期图如下:

代码中 Activity状态保存与恢复的回调方法如下:

  // Activity 恢复数据的方法,经常在 oncreate 方法中恢复数据@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);Log.i(TAG, "----onRestoreInstanceState----");}// Activity 保存数据的方法,经常在 onPause 方法中保存数据@Overridepublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {super.onSaveInstanceState(outState, outPersistentState);Log.i(TAG, "----onSaveInstanceState----");}

八、 面试中常问的题型

  1. Activity A 启动 Activity B, 然后再返回A,简述一下 A与B生命周期的调用方法。
- 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----
- 2.点击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----
- 3.结束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 使用方法详解

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.Activity 概览 二.Activity 生命周期 三.Activity 的注册方法 四.App ...

  2. 怎么打开python shell_Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发 ...

  3. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...

  4. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

  5. python调用adb shell命令_Python之使用adb shell命令启动应用的方法详解

    Python之使用adb shell命令启动应用的方法详解 一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具 ...

  6. 用java写jsp页面跳转页面跳转_五种 JSP页面跳转方法详解

    相关文章 JAVA,HashSet面试题:本文列举java面试题中关于HashSet的一些知识点 开源混淆工具ProGuard配置详解及配置实例:ProGuard是一个免费的java类文件压缩,优化, ...

  7. android中oncreate方法,android开发之onCreate( )方法详解

    这里我们只关注一句话:This is where you should do all of your normal static set up.其中我们只关注normal static, normal ...

  8. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  9. android 多闹钟实现代码,Android编程实现闹钟的方法详解

    Android编程实现闹钟的方法详解 发布时间:2020-09-30 10:18:02 来源:脚本之家 阅读:75 作者:Jacob-wj 本文实例讲述了Android编程实现闹钟的方法.分享给大家供 ...

最新文章

  1. “外部质量”还是“内部质量”
  2. 在大规模 Kubernetes 集群上实现高 SLO 的方法
  3. C# Datatable排序与取前几行数据
  4. 如何测试数据库表空间不足场景
  5. 鲁大师公布Q1手机UI排行:第一万万没想到
  6. Android使用MediaRecorder和Camera实现视频录制及播放功能整理
  7. CXF开发WebService服务器端
  8. SOTIF很快将会取代ISO 26262?为您详细解读SOTIF标准ISO/PAS 21448
  9. SQL Server存储过程文本加密与解密过程详解 2019版可用
  10. 菜菜之路-C语言求阶乘和
  11. uclinux 嵌入式linux,2017最新嵌入式操作系统uCLinux分析
  12. .Net使用DES解密发生“数据不正确”的错误
  13. 流程内耗的雾霾几时休?
  14. 吉林大学算法设计与分析考前突击
  15. 【做题笔记】P2327 [SCOI2005]扫雷
  16. 支持向量机(SVM)学习小记
  17. textarea滚动条CSS样式属性设置
  18. VS2017 winform开发知识点汇总
  19. 基于Qiskit——《量子计算编程实战》读书笔记(二)
  20. MAKER避免重复运算

热门文章

  1. 关于字符串日期带有AM 或 PM转成 Date格式
  2. Pyecharts Geo在地图上添加坐标点
  3. 低代码amis学习笔记(表单)
  4. 倾转旋翼飞行模拟(基于X-planeXV-15)
  5. 离散度计算公式 python_python数据分析数据标准化及离散化详解
  6. 谁的大学不迷茫?大学生存手册,学习上海交大生存手册
  7. 程序员的“自我修养“
  8. iOS 集成一网通支付的坑
  9. 学习 3D数学基础 (矩阵1)
  10. 基于Jenkins + Git的PHP项目编译脚本