Android总结之Activity

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android总结之Activity相关的知识,希望对你有一定的参考价值。

参考技术A GUI,界面,与用户交互的可视接口。
当然Fragment,View也是,不过我把它看作是控件,Activity是开发中最基本的容器(窗口)。

目的是便于管理Activity生命周期。
新启动的Activity会压入栈顶,而处于栈顶的Activty处于Active活跃状态,即可以和用户做交互(可见可交互)。压在下面的Activity则处于可见不可交互,或不可见不可交互状态,并且系统可能会因为内存不足原因优先回收掉任务栈最下面的Activity,所以也有被回收状态。

1.资源相关的系统配置发生改变导致Activty被杀死并重新创建
2.资源内存不足导致低优先级的Activity被杀死

扩展:进程优先级

当Activity异常被回收的情况下,系统会调用onSaveIntanceState(Bundle),重新启动时会调用onRestoreInstanceState(Bundle),所以可以在Bundle做一些数据保存和恢复的工作。

数据恢复:onCreate()与onRestoreInstanceState()区别:

onCreate()需要判空,onRestoreInstanceState不需要。

启动模式简单来说就是定义Activity实例与Activity任务栈的关联方式。

目的:

设置方式:

有哪些启动模式?

TaskAffinity(任务相关性),这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的名字。所有我们可以通过设置TaskAffinity为每个Activity单独指定任务栈。

启动Activity就两种,显示调用和隐式调用。

即在Intent中,显示传入要跳转的组件类名。这种方式比较简单直接,但也造成了关联耦合。

这样调用方式的好处是我不必知道我的目标组件具体的名字,只要有组件满足我设置的过滤条件即可找到我想要的组件。这种方式广泛应用在模块化开发,解决了模块之间的跳转问题。

隐式调用需要Intent能够匹配目标组件的IntentFilter中设置的过滤信息,如果不匹配将无法启动目标组件。IntentFilter中的过滤信息包括action、category、data

清单文件中,如果data仅指定了mimeType,没有指定URI,则data中URI的scheme的默认值为file和content,所以Intent中URI的scheme也必须为file或content才能匹配到。

类似URI的结构,就是匹配URI的。

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

使用PackageManager的两种方法判空。

第二个flag参数使用MATCH_DEFAULT_ONLY时,表示仅仅匹配那些在intent-filter中声明了android.intent.category.DEFAULT这个category的组件。

以上是关于Android总结之Activity的主要内容,如果未能解决你的问题,请参考以下文章

【Android】显式/隐式Intent意图跳转Activity总结

android之Activity的创建与关闭

Android疑难杂症之android:configChanges="orientation" 无效

activity启动模式之singleTop

Android基础系列合集

Android Studio 改变app启动页面