ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Activity的基本信息-第一篇

2020-06-24 18:44:25  阅读:277  来源: 互联网

标签:Task 启动 第一篇 activity 栈顶 信息 实例 Activity


Activity的基本信息-第一篇

Activity的定义

An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View).

Activity是Android的四大组件(Activity 活动、Service 服务、BroadcastReceive 广播接收器、Content Provider 活动)之一, 是Android开发中使用最为频繁的一种组件。Activity提供了一个窗口以供应用在其中绘制界面、和应用进行交互,这个窗口通常会占满整个屏幕的空间,但也可以比屏幕小,并在其他窗口上浮动显示。

任务和返回栈

在Android系统中,使用Task(任务)来对Activity进行统一的管理。一个Task就是一组存放在栈里的Activity的集合,这些Activity会按照启动顺序依次存入栈中,这个栈称为返回栈(Back Stack),系统会将处以返回栈栈顶的Activity展示给用户。Android系统默认会为每个应用维持一个Task以存放该应用中使用的所有Activity,并且该Task的默认name为该应用的包名。

栈是一个后进先出的数据结构。在默认情况下,每当我们启动一个Activity,该Activity会在返回栈中入栈,并处于栈顶的位置,展示在前台与用户进行交互。而当我们按下Back键或调用Activity类中的finish()方法来销毁一个Activity时,返回栈栈顶的Activity会出栈,前一个入栈的Activity会重新处于栈顶的位置与用户进行交互。

Activity的生命周期

Alt
以上图片是Android开发者官网中对Activity生命周期的简化图示。

为了在Activity生命周期的各个阶段进行转化,Activity类提供了6个核心回调方法:

  1. onCreate()

    在Activity第一次被创建时调用。通常在该方法中完成活动的初始化操作,例如加载布局、进行事件的绑定等等

  2. onStart()

    当Activity由不可见变为可见状态时调用。可以在该方法初始化维护界面的代码。

  3. onResume()

    该方法会在Activity准备好与用户进行交互的时候调用,Activity进入运行状态。此时Activity一定位于返回栈的栈顶位置,并且处于运行状态。

  4. onPause()

    该方法会在系统准备启动或切换到另一个Activity时调用(Activity不再位于前台位置),Activity进入暂停状态。通常在该方法对一些关键的数据进行保存、释放系统资源。

  5. onStop

    Activity完全不可见时会调用该方法,Activity进入停止状态。在该方法中释放或调整一些不可见时的无用资源,例如动画效果,以及对一些数据进行保存

  6. onDestroy()

    在销毁Activity之前,系统会先调用onDestroy(),Activity进入销毁状态。

  7. onRestart()

    当Activity由停止状态转变为运行状态之前调用。

Activity的启动模式

Activity的启动模式简单的说就是定义Activity实例与Task的关联方式。Activity的启动模式一共有4种,分别是startard、singleTop、singleTask和singleInstance。

  • “standard” (默认模式)

    当通过这种模式来启动Activity时, Android总会为目标 Activity创建一个新的实例,并将该Activity添加到当前Task栈中。这种方式不会启动新的Task,只是将新的 Activity添加到原有的Task中。

  • “singleTop”

    该模式和standard模式基本一致,但有一点不同:当将要被启动的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用Task栈顶的Activity。

  • “singleTask”

    Activity在同一个Task内只有一个实例。如果将要启动的Activity不存在,那么系统将会创建该实例,并将其加入Task栈顶;如果将要启动的Activity已存在,且存在栈顶,直接复用Task栈顶的Activity。如果Activity存在但是没有位于栈顶,那么此时系统会把位于该Activity上面的所有其他Activity全部移出Task,从而使得该目标Activity位于栈顶。

  • “singleInstance”

    无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例且会用一个全新的Task栈来装载该Activity实例(全局单例)。如果将要启动的Activity不存在,那么系统将会先创建一个全新的Task,再创建目标Activity实例并将该Activity实例放入此全新的Task中。如果将要启动的Activity已存在,那么无论它位于哪个应用程序,哪个Task中;系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来。

可以通过以下两种方法来指定Activity的启动模式。

  1. 在AndroidManifest.xml中通过activity元素的launchMode属性进行指定。

    <activity
            ......
            android:launchMode="standard"
             >
           .......
    </activity>
    
  2. 通过Intent中的setFlags()传递相应的标志,以指定Activity的启动模式

    Intent intent = new Intent(this,NewActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    

    可以通过标志修改的默认模式有哪些?

    FLAG_ACTIVITY_NEW_TASK
      与"singleTask"模式相同,在新的 task 中启动 activity。如果要启动的 activity 已经运行于某 task 中,则那个 task 将调入前台。

    FLAG_ACTIVITY_SINGLE_TOP
      与 "singleTop"模式相同,如果要启动的 activity位于back stack 顶,系统不会重新创建目标Activity实例,而是直接复用Task栈顶的Activity。

    FLAG_ACTIVITY_CLEAR_TOP
      **此种模式在launchMode中没有对应的属性值。**如果要启动的 activity 已经在当前 task 中运行,则不再启动一个新的实例,且所有在其上面的 activity 将被销毁。

参考引用链接

标签:Task,启动,第一篇,activity,栈顶,信息,实例,Activity
来源: https://blog.csdn.net/qq_35911516/article/details/106912594

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有