`

Activity

 
阅读更多




 

创建状态:已经从内存中生成了。(oncreate(进) onDestroy(出))

可见状态:如果前台Activity是有一定透明度或不是全屏的,就可以看到了,但不在前台。(onStart(进) onStop(出))

前台状态:在最上层可以直接交互。(onResum(进) onPause(出))

 

Activity正常生命周期情况:

1.A再次可见会执行onRestart();

2.A->B时,如果B是有一定透明度或不是全屏的,A可见,A生命周期只执行onPause不执行onStop。

     (如果A上弹出Dialog时,A的生命周期没有变化)

3.A->B时,如果B不透明且全屏,A生命周期只执行onPause和onStop

4.A->B时,如果B不透明且全屏,A和B的生命周期顺序是A.onPause,B.onCreate B.onStart B.onResume             A.onStop。(在A的 onPause不要执行费时的东西,因为会影响B的显示速度)

 

Activity异常生命周期情况:

Activity异常结束再恢复会多执行另外一对函数onSaveInstanceState onRestoreInstanceState。

---------onstart后--------------------------------------

onRestoreInstanceState是在onStart之后,在onResume之前(只有从异常恢复时才执行)。

onSaveInstanceState在onStop之前,它和onPause没有前后关系。(跳转或者home此函数都会执行)

---------onStop前-------------------------------------

1.A不在前台因内存不足被意外回收后,再次回到A时会执行onCreate(savedInstanceState),这时savedInstanceState不等于null(正常状态下savedInstanceState==null),并且还会执行onRestoreInstanceState(savedInstanceState)(正常状态下不会被执行)。

2.当配置改变时会引起当前Activity销毁重建算是Activity异常终止。例如竖横屏切换时。

竖屏-->横屏会重建一次Activity:

       onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()i

横屏-->竖屏会重建两次Activity:

      onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()-->onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()

 

如果不想让某一项配置的变化引起Activity的变化,可以给该Activity的android:configChanges属性赋该项的值,过滤掉此项。过滤掉此项后不会引起Activity重建但会回调activity的onConfigurationChanged方法在在这个方法里可以做其他处理。

这些配置项可以是:

orentation 屏幕方向发生改变

keyboardHidden 键盘可访问性发生改变

screenSize 屏幕大小改变时(方向发生改变会引起该项变化)

locale 本地位置发生改变时。

 

------------------------------------------------------------------------------------------------------------------------

启动模式

 

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 

 

1、标准模式(standard):ABC->ABCC 每次激活Activity时都会创建Activity,并放入任务栈中,永远不会调用onNewIntent()。  

例如A启动A,A再接着启动A,A继续启动A,然后再分别出栈

 

2、栈顶复用模式(singleTop):ABC->ABC如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,并调用其onNewIntent(),否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例,而不会调用onNewIntent(),此时就跟standard模式一样)。

 

3、栈内复用模式(singleTask):ABCDF->ABC如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中(此时不会调用onNewIntent())。

 

4、单例复用模式:AB->AB: C  在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。 

 

       一个应用的Activity供多种方式调用启动的情况,多个调用希望只有一个Activity的实例存在,这就需要Activity的onNewIntent(Intent intent)方法了。只要在Activity中加入自己的onNewIntent(intent)的实现加上Manifest中对Activity设置lanuchMode=“singleTask”就可以。 

 

       onNewIntent()非常好用,Activity第一次启动的时候执行onCreate()---->onStart()---->onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到onNewIntent(). 而后面如果再有想启动Activity的时候,那就是执行onNewIntent()---->onResart()------>onStart()----->onResume().  如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()---->onStart()---->onResume()等。

 

      当调用到onNewIntent(intent)的时候,需要在onNewIntent() 中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。 

 

 

任务栈:保存Activity的顺序的栈,具有相同TaskAffinity(任务密切关系)属性Acivity会在同一个任务栈里。同一个应用里的所有Activity默认有相同的TaskAffinity,在同一个任务栈里。如果Activity的allowTaskReparenting(允许任务重定父级)属性为真且属于应用B时,A应用启动了该Activity在A的任务栈里,如果这时启动B应用,该Activity会回到B应用的任务栈里。

 

 

-----------------------------------------------------------------------------------------------------

Intent

intentFilter匹配规则:

如果一个Activity接受隐式调用,intentfilter中action必须有,category是必须有且这个android.intent.category.DEFAULT必须有,data不是是必须的。”,

 

action过滤规则:intent只有一个action,Intentfilter可以有多个要与其中一个action相同(action相同是指action字符串相同),则匹配,否则不匹配。(如果要匹配,intentfilter中有action,intent必须要有action)

 

category过滤规则:intent可以增加category,intent所有的category必须在Intentfilter中找到对应(category相同是指category字符串相同)。否则不匹配。(intent可以不手动设置category,intent中默认有一个android.intent.category.DEFAULT,Actiivity如果接受隐式调用intentfilter必须有android.intent.category.DEFAULT)

 

data过滤规则:intent只能设置一个data,和Intentfilter中其中一个data匹配(data匹配是指目标data中所用字段源中都有且相同),则匹配,否则不匹配。(如果要匹配,intentfilter中有data,则intent必须设置data)

data结构:

   <data

        android:scheme="d"

        android:host="d"

        android:port="90"

 

        android:path="/dd/dd"

        android:pathPattern="//d"  //路径模式

        android:pathPrefix="/dd"  //路径前缀

 

        android:mimeType="image/*"/> 

data有两部分组成uri和mimeType

<scheme>://<host>:<port>/[<pathPrefix>|<path>|<pathPattern>]

scheme:uri的模式,比如HTTP file等。scheme必须有。

host:uri主机名

port:端口号

path 是全路径,如:http://example.com/blog/abc.html,这里将 path 设置为 /blog/abc.html 才能够进行匹配;

pathPatter也是路径只是里面的字符串是正则表达式。

 

pathPrefix 用来匹配路径的开头部分,拿上面的 Uri 来说,这里将 pathPrefix 设置为 /blog 就能进行匹配了;

 

mimeType:媒体类型,例如 image/jpeg、video/*

 

setType 调用后设置 mimeType,然后将 data 置为 null;

setData 调用后设置 data,然后将 mimeType 置为 null;

setDataAndType 调用后才会同时设置 data 与 mimeType。

 

intent 的 

resolveActivity如果没有匹配的activity返回null

packageManager的

resolveActivity如果没有匹配的activity返回null

queryIntentActivities返回匹配的所有Activity信息

 

intent的flag:

flag有些事系统使用的,不需要用户。

还有些其他的flag

有些flag是启动activit,给intent设置flag启动activity。

FLAG_ACTIVITY_SINGLE_TOP

达到activity栈顶复用。

 

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

一般一起使用达到activity的栈内复用

 

  • 大小: 107.2 KB
分享到:
评论

相关推荐

    重建Activity-Recreating an Activity

    在Android开发中,Activity是应用组件的一种,它提供了一个屏幕,用户可以在其中进行交互。Activity的生命周期是管理Activity状态的一系列方法,确保在不同情况下能正确地保存和恢复用户的进度。在Activity生命周期...

    Android父Activity获取子Activity返回信息demo

    在Android应用开发中,Activity是构成应用程序的基本组件,它代表用户界面的一个屏幕。有时,我们需要在子Activity执行某些操作后将结果返回给父Activity。这个过程通常涉及到Intent的使用,Intent不仅用于启动新的...

    Android 中从activity1跳转到activity2再回到activity所经历的生命周期

    本文将详细解析从一个Activity(Activity1)跳转到另一个Activity(Activity2),然后再返回到原Activity(Activity1)时,这两个Activity分别会经历哪些生命周期方法。 #### Activity1的生命周期变化 1. **...

    Android利用Intent启动和关闭Activity

    【Android Intent 启动和关闭Activity】 在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity...

    在一个Activity中更新操作另一个Activity的内容

    在Android应用开发中,Activity是用户界面的基本单元,通常用于展示特定的功能或信息。当我们需要在一个Activity中更新另一个Activity的内容时,直接操作是不允许的,因为Android系统的设计原则是Activity之间应该是...

    Android使用Activity用作弹出式对话框

    在Android开发中,有时我们需要创建一个弹出式对话框来与用户进行交互,但不同于常见的`Dialog`类,我们可以利用`Activity`来实现这一功能。这种方式适用于需要更复杂交互或者自定义布局的情况。本文将详细讲解如何...

    从application启动activity

    在Android应用开发中,"从application启动activity"是常见的操作,涉及到Android系统的基本架构和生命周期管理。Application类是每个Android应用程序的基类,它在应用程序的生命周期中扮演着核心角色,而Activity是...

    Activity生命周期完美呈现

    Activity是Android应用开发中的核心组件,它代表了用户与应用交互的界面。了解并掌握Activity的生命周期对于Android开发者至关重要,因为它决定了应用的行为和性能。在本文中,我们将深入探讨Activity的生命周期,...

    activity与activity利用接口相互传递数据

    在Android开发中,Activity是应用程序的基本组件,用于展示用户界面并处理用户交互。当我们需要在两个Activity之间传递数据时,通常有多种方法,如Intent、Bundle、静态变量、文件、数据库等。本教程将聚焦于一种...

    activity3activity3activity3activity3activity3activity3activity3a

    标题中的"activity3activity3activity3activity3activity3activity3activity3a"看起来可能是由于重复输入造成的错误,我们可以简化为"activity3",这通常在编程或软件开发中可能代表一个特定的操作、事件或者组件。...

    Activity 的生命周期 以及 横屏竖屏切换时 Activity 的状态变化

    ### Activity的生命周期与横竖屏切换时的状态变化 在Android应用开发中,`Activity`作为四大组件之一,是用户交互的主要界面。理解`Activity`的生命周期对于开发流畅且高效的用户体验至关重要。本文将深入探讨`...

    Current Activity_v1.5.2-play.rar

    《当前Activity_v1.5.2-play.rar》是一款专为Android开发者设计的小型实用工具,其核心功能是显示设备上当前运行的Activity的包名和类名。在Android开发过程中,了解并掌握Activity的运作机制至关重要,这款应用可以...

    activity5.22中文版api+表

    Activity在IT领域,尤其是Android开发中,扮演着至关重要的角色。它是Android应用程序设计的核心组件之一,代表了用户界面的一个屏幕或者一个操作流程。这个压缩包文件"activity5.22中文版api+表"显然是针对Android...

    背景半透明效果的Activity

    在Android开发中,实现“背景半透明效果的Activity”是一种常见的需求,它可以为用户界面增添一层优雅而现代的视觉体验。这种效果通常是通过调整Activity的窗口属性和使用自定义主题来实现的。以下将详细解释如何...

    Android 销毁当前的Activity

    Android 销毁当前的Activity Android 系统中,Activity 是一个非常重要的组件,它负责处理用户交互、显示界面和执行业务逻辑。然而,在屏幕方向改变时,Activity 默认会被销毁,然后重启一个新的实例。这种机制可以...

    activity7.0集成达梦8数据库

    当我们谈到"activity7.0集成达梦8数据库"时,这涉及到的是将Activity7.0与达梦8数据库进行整合,以实现更高效的数据存储和处理能力。 集成过程通常包括以下几个关键步骤: 1. **环境准备**:首先,确保系统已经...

    Activity5全面使用手册.zip

    Activity5全面使用手册.zip是一个关于Activity5开发的综合资源包,包含了用户全面学习和使用Activity5所需的各种材料。Activity5可能是一个软件框架、一个开发工具或者是某个应用平台的一部分,其核心在于提供了一种...

    Fragment与Activity之间通信实例

    在Android应用开发中,Fragment和Activity是两个核心组件,它们共同构建了用户界面。Fragment代表一个可重用的UI部分,而Activity则是程序中的一个窗口,它可以包含一个或多个Fragment。Fragment与Activity之间的...

    Android面试题-Activity A跳转Activity B,再按返回键,生命周期执行的顺序?

    Activity A跳转Activity B,再按返回键,A、B的生命周期执行顺序是什么? 当听到这个题目的时候,我得意地笑了笑,对于Activity的生命周期已经记熟的我,心想,为什么不直接问Activity的生命周期呢?于是想当然的说...

    android如何设置Activity背景色为透明色

    一直听说透明效果的activity,到底长啥样呢?来张图看看,上面这个白色背景的就是 方法一 在res/values/styles.xml,设置Activity的样式 &lt;!--透明activity的style--&gt; &lt;style name=transparent_activity...

Global site tag (gtag.js) - Google Analytics