四大组件 - Activity

2019-07-16  本文已影响0人  吕注意

定义

Activity实际上只是一个与用户交互的接口

生命周期

1. Activity生命周期中的4种状态

2. Activity生命周期里的方法

3.1 onCreate()

该方法表示Activity正在被创建,这是Activity生命周期的第一个方法。通常在里面进行初始化工作

3.2 onStart()

该方法表示Activity正在被启动,这个时候的Activity已经被创建好了,完全过了准备阶段,但是没有出现在前台,还不能与用户进行交互

3.3 onResume()

该方法表示Activity已经可见了,即出现在前台且可以与用户进行交互了。处于Active状态

3.4 onPause()

该方法表示Activity正在暂停,大多情况下Activity执行完onPause()方法后会继续执行onStop()方法。至于什么情况下会继续执行onStop()方法可以简单的分为两种情况:
1. 当前Activity启动了另外一个Activity或者回切到上一个Activity时就会执行onStop()方法
2. 当前Activity启动了类似于话框的东西时,就值执行onPause()方法,而不会执行onStop()方法

3.5 onStop()

该方法表示Activity即将停止,我们应该在此方法中做一些不那么耗时的轻量级回收操作

3.6 onDestory()

该方法表示Activity要被销毁了,这是Activity生命周期的最后一个阶段,我们可以在该方法里面做一些回收工作和资源释放

3.7 onRestart()

该方法表示Activity正在重新启动。一般情况下,一个存在于后台不可见的Activity变为可见状态,都会执行onRestart()方法,然后再执行onStart()方法

3. Activity的生命周期分析

中间涉及两个方法:

  1. onSaveInstanceState() 方法:
    主要用来存储数据(调用的时机在onStop()方法之前)

  2. onRestoreInstanceState() 方法:
    主要用来恢复数据(调用时机在onstart()之后)

3.2.1 因资源配置发生改变导致终止的时候:Activity会被销毁然后重建。

当销毁时,其onPause()、onStop()、onDestory()方法均会被调用。系统会自动调用onSaveInstanceState()方法来保存当前Activity的状态。

当重建时,系统会调用onRestoreInstanceState()方法,并且把onSaveInstanceState()方法所保存的Bundle对象作为参数传递给onRestoreInstanceState()方法和onCreate()方法。然后通过这两个方法来取出之前保存的数据进行恢复。

  • 当异常情况下需要重新创建时,系统会默认为我们保存当前Activity的视图结构,并且在Activity重启后为我们恢复这些数据(例如:文本框输入的数据、ListView滚动的位置)
  • 这些View相关的状态系统都能默认为我们恢复,具体针对某一特定的View系统能为我们恢复哪些数据,就得查看View的源码

关于保存和恢复View层次结构,系统的工作流程:

3.2.2 资源内存不足导致优先级低的Activity被杀死

Activity的优先级是指一个Activity对于用户的重要程度,。按照这种规律分为以下等级:

  • 最高优先级:前台Activity
  • 中等优先级:可见但非前台的Activity (Pause状态下的Activity)
  • 最低优先级:完全存在后台的Activity (Stopped状态下的Activity)

注:当内存严重不足时,系统会按照优先级去kill掉Activity所在的进程,并在后续通过onSaveInstanceState()方法和onRestoreInstanceState()方法来储存和恢复数据。

3.3.2 什么情况下导致Activity的onDestory()方法不执行

当用户后台强杀应用程序时,onDestory()有时会不执行。分两种情况:

Activity的启动模式

说到启动模式,就会联想起 Android任务栈 ,关于Android任务栈:

  • 它是用来储存Activity实例的一种数据结构,Activity的跳转以及回调都与任务栈有关
  • 启动一个Activity后,这个Activity实例就会放进任务栈中,当点击返回键时,位于任务栈顶层的Activity就会被清理出去。
  • 当任务栈不存在任何Activity的实例的时候,系统就会回收这个任务栈,也就是退出程序了。

启动模式的作用

杜绝浪费内存的行为

如果一个Activity频繁启动,那么便会往任务栈里面放进多个相同的实例。这对内存而言不是好事,明明一个Activity实例就可以应付所有的启动需求,实际上缺放了这么多个,造成了内存的浪费。因为此启动模式也就应运而生。

启动模式类型

singleTask模式默认具有 clearTop 的效果,即系统将目标Activity跳到栈顶的方法是:将在该Activity上面的Activity全部出栈,以达到跳到栈顶的效果

启动模式的使用

Activity组件之间的通信

      Bundle bundle = new Budle();
      bundle.putString("data","数据");  
      
      Intent intent = new Intent(MainActivity.this,Main2Activity.class);
      intent.putExtras(bundle);
      startActivity(intent);

scheme 跳转协议

Android中的一种跳转协议,通过自定义scheme协议,可以非常方便的跳转到app中的各个页面,通过该协议,服务器可以定制化告诉app跳转到哪个页面,可以通过通知栏消息定制化跳转页面,可以通过 H5 页面跳转到相应页面等。

上一篇下一篇

猜你喜欢

热点阅读