android初学者必须掌握的Activity状态的四大知识点(必读)

作者:King骷髅 时间:2022-08-31 13:26:31 

这几天一直都在捣鼓android的知识点,兴趣班的老师,讲课太过深奥,天(想到什么就见什么,后后面完全不想听),最后自己找资料总结了在Android学习中很重要的一个组件Activity,那就开始吧!

第一:掌握Activity的四种状态及什么时候触发

首先我们要知道什么是Activity,简单来说Activity其实就是一个屏幕的显示页面。(简单的阐述)

我们知道Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部。

Acitivity一般意义上有四种状态:

1、Running状态: 一个新的Activity启动入栈后,它在屏幕的最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态,Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。

2、Paused状态:当Activity处于此状态时,此时它依然与窗口管理器保持连接,系统继续维护其内部状态,它仍然可见,但它已经失去了焦点,故不可与用户交互。

3、Stopped状态: 当Activity 不可见时,Activity处于Stopped状态。当Activity处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦Activity退出或关闭时,当前的数据和UI状态就丢失了

4、Killed状态: Activity被杀掉以后或者被启动以前,处于Killed状态。这是Activity已从Activity堆栈中移除,需要重新启动才可以显示和使用。

android初学者必须掌握的Activity状态的四大知识点(必读)

对四种状态的一个总结:Running状态和Paused状态是可见的,Stopped状态和Killed状态时不可见的,当然Starting是有系统自身自动创建,而且每一个活动( Activity )都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。

但是当一个活动的状态发生改变的时候,开发者可以通过调用 onXX() 的方法获取到相关的通知信息。

接下来讲下各种状态在何时触发:

1、Running状态:

期间触发的函数及顺序为: onCreate() ->on Start() -> onResume()。

注意:

1.1:onCreate()只有在该Activity是第一次被创建时才会被调用,主要是负责Activity的一般性的初始化设置,包括视图的创建,数据的绑定等等。

 需要注意的是若之前有冻结的state(即系统对该Activity调用过onSaveInstanceState()函数),则可以通过其 Bundle 参数进行state恢复。

1.2:on Start()是当Activity正在变为可见状态时才会被调用。一般地在此期间可以注册一个广播等等。

1.3:onResume()是在该Activity将要和用户进行交互时被调用,此时Activity位于的活动栈顶部。

2、Paused状态:

运行状态到暂停状态所触发的函数及顺序为:onResume() -> onPuased()

 暂停状态恢复至运行状态所触发的函数及顺序为:onPuased() -> onResume()。

注意:

2.1:onPuased()是当一个Activity失去系统焦点后将会被调用,包括见面被部分遮挡,以及设备转入休眠状态等等。一般地在此期间对一些未保存的数据进行持久化并停 止其他需要耗费CPU的操作,同时不可进行耗时操作,否则会阻塞系统UI线程。

2.2:一个处于暂停状态的Activity只有在系统极度缺乏内存资源的情况下才会被系统强制结束。

3、stopped状态:

暂停状态到停止状态所触发的函数及顺序为:onPuased() -> on Stop()。

停止状态恢复至运行状态所触发的函数及顺序为:on Stop() -> onRestart() -> on Start() -> onResume()。

注意:

3.1:on Stop()是当一个Activity变为不可见时将会被调用,此时可能是由于该Activity要被注销或新的Activity完全遮挡了该Activity。在此期间一般可以进行取消注册 广播等操作,因此用户不可见。

3.2:onRestart()是当一个Activity从停止状态恢复至运行状态时将会被优先调用。

4、Killed状态:

停止状态到死亡状态分为两种情况:(1)由用户操作导致,则执行:on Stop() -> onDestroy()。

(2)由系统自动强制执行,则该Activity被强行结束。

注意:

4.1:onDestroy()是当一个Activity正在被系统finished期间被调用的。

 第二:掌握Activity的生命周期及各个阶段触发的事件名称和触发次数

Activity一共有七个生命周期函数,分别为onCreate(),onRestart(),on Start(),onReusme(),onPause(),on Stop(),onDestory()。

1:onCreate()

当Acitivity第一次被创建时触发,一般在这里要做的事情包括创建视图(setContentView())、向视图填充必要的数据等等。

2:onRestart()

如果Activity之前被stop过,那么下一次onStart()方法之前会先触发这个方法,当处于停止状态的活动需要再次展现给用户的时候,触发该方法。

3:onStart()

只要Activity从不可见变成可见,就会触发到这个方法,但被AlertDialog遮挡/显示的情况不算在内。

 4:onResume()

当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。例如本来Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。

5:onPause()

同onResume()的触发条件刚好相反,如果Activity本来在最上层,当它要让出最上层的位置时会触发这个方法。

onPause()和onResume()是被触发最频繁的两个方法,所以在这里不应该执行过于消耗资源的方法。

6: onStop ()

当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。

所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。

7: onDestroy ()

当活动销毁的时候,触发该方法。和onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。

接下来我们用代码来实现具体的方法触发:

创建一个android项目,在MainActivity中进行编辑


public class MainActivity extends Activity {

// onCreate系统自动初始化
 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   Log.i("--MainActivity--","--------onCreate- 系统自动初始化---------");
 }

//从stop转为激活状态时执行
 @Override
 protected void onRestart() {
   super.onRestart();
   Log.i("--MainActivity--", "------onRestart--stop转为激活状态时执行----");
 }

//Activity开始加载事件时执行(新创建时,或者重新启动的时候执行!)
 @Override
 protected void onStart() {
   super.onStart();
   Log.i("--MainActivity--", "--------onStart---开始加载事件时执行-----");
 }

//Activity恢复到激活状态时执行(任何一次进入激活状态都将执行)
 @Override
 protected void onResume() {
   super.onResume();
   Log.i("--MainActivity--", "----------onResume-恢复到激活状态时执行-------------");
 }

//Activity 被覆盖的时候执行
 @Override
 protected void onStop() {
   super.onStop();
   Log.i("--MainActivity--", "-------onStop ----被覆盖的时候执行-----------");
 }

//Activity 退出或者被回收时执行,仅执行一次
 @Override
 protected void onDestroy() {
   super.onDestroy();
   Log.i("--MainActivity--","---------onDestroy---退出或者被回收时执行,仅执行一次--------------");
 }

}

当我们启动部署程序的时候,通过LogCat 日志来查看信息android初学者必须掌握的Activity状态的四大知识点(必读)

来源:http://www.cnblogs.com/KingSkull/p/6095062.html

标签:activity,android
0
投稿

猜你喜欢

  • springboot bootcdn使用示例详解

    2022-01-14 21:56:46
  • java线程池:获取运行线程数并控制线程启动速度的方法

    2022-06-30 23:22:57
  • c# socket网络编程接收发送数据示例代码

    2021-08-31 06:14:13
  • Android Intent调用 Uri的方法总结

    2021-11-13 22:46:53
  • C#实现上位机与欧姆龙PLC通讯(FINS)

    2022-10-05 03:10:08
  • C#下listview如何插入图片

    2023-06-18 11:45:44
  • Java 二分查找算法的实现

    2022-07-23 11:10:13
  • Struts2通过自定义标签实现权限控制的方法

    2021-07-19 11:06:22
  • C#实现GridView导出Excel实例代码

    2023-10-29 04:31:09
  • Java 按照字节来截取字符串的代码(不会出现半个汉字)

    2023-04-30 01:40:22
  • Android 仿苹果IOS6开关按钮

    2023-11-21 15:16:08
  • C#中判断本地系统的网络连接状态的方法

    2023-07-02 15:39:41
  • C#实现HTTP下载文件的方法

    2022-01-19 02:35:50
  • SpringBoot去除参数前后空格和XSS过滤

    2023-07-27 02:33:56
  • android view转Bitmap生成截图的方法

    2022-11-07 13:41:53
  • Java Base64解码错误及解决方法

    2023-02-09 03:36:35
  • Android自定义软键盘的步骤记录

    2023-04-08 07:05:50
  • 在Eclipse安装Spring boot插件的步骤(图文)

    2023-01-14 05:04:05
  • Android编程判断网络是否可用及调用系统设置项的方法

    2023-08-14 13:05:22
  • android6.0权限动态申请框架permissiondispatcher的方法

    2023-07-31 10:51:57
  • asp之家 软件编程 m.aspxhome.com