您的位置:首页 > 移动开发 > Android开发

android四大组件笔记之Activity(一)

2017-06-15 17:08 417 查看
安卓的开发主要是围绕activity、broadcastReceiver、service、ContentProvider四大组件和基于view的子类组成,其中activity、broadcastReceiver、service都是通过它们的桥梁Intent创建和传递消息。通过Handler来执行消息、线程通讯的操作。而关于IPC,我觉得不得不说的就是binder。咱们这篇的主角是android的四大天王之一Activity。

Activity

是什么(what)?

activity是最基本也是最常见的android组件之一,负责与用户交互,一个activity通常就是一个屏幕。

在这我区分一下activity、window和view。

window相当于显示屏,通过LayoutInflater.inflate()加载view,通过addView加载到window上显示。

view(或viewgroup)是我们控件的基类。

activity相当于window的控制类,它可以通过phoneWindow的setContentView创建一个window。

启动模式(launchmode)

standard

standard属于默认设置 ,启动一个activity会生成新的activity

singletop

如果该activity已经启动过了,且正好位于栈顶,那么并不会为程序生成一个新的activity,而是直接使用栈顶的activity,至有满足上述两个条件(已经启动过和位于栈顶)才会这样,否则也会生成一个新的activity。

singletask

该模式下,只会创建该activity一个实例,在此模式下启动activity ,如果栈中已经有了该activity,那么直接使用。(而如果它不是位于栈顶,那么位于它上面的activity实例要依次出栈)

singleInstance

该模式下,将会创建一个task,且在该task下生成要启动的activity实例。该task下只会生成一个activity实例,且不会重复被实例化。后续的请求都不会创建该实例,除非这个任务栈被销毁了。

生命周期

流程图

这是我用渣渣像素丛书上照下来的。



基本情况

启动Activity:系统会先调用onCreate方法,然后调用onResume,activity进入运行状态。

当activity被其他activity覆盖其上或锁屏:系统会调用onPause方法,暂定当前activity的运行。

当前Activity由被覆盖状态回到前台或解锁,系统会调用onResume方法,再次进入运行状态。

当前activity转到新的activity界面或者按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

用户回到此activity:系统先调用onStart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

用户退出当前activity:系统先调用onPause方法,然后迪奥用onStop,最后调用OnDestroy

activity的状态保存

通过onRestoreINstanceState(Bundle)方法对信息进行保存,之后在onCreate(Bundle)或者onRestoreInstanceState(Bundle)方法中恢复信息,值得一提的是,onSaveInstanceState(Bundle)只有在该activity所在的进程被系统杀死的时候才会调用,比如说突然来了电话,系统内存不够。

通过activity的生命周期中的onPause和onResume方法;在pause的时候保存信息,在resume时恢复信息。值得注意的是,onResume和onPause不能做太耗时的工作。

IntentFilter的匹配规则

action的匹配规则

Intent中的actionability必须能够和过滤规则中的action匹配。这里说的匹配是指action的字符串值完全相同,并且区分大小写,一个过滤规则可以有多个action,只要其中一个匹配成功就OK。但只要过滤规则中有action,Intent中必须有其中一个action和 过滤规则中其中一个相同才可以匹配成功。

category的匹配规则

Intent中如果有category,那么所有的category都必须和过滤中的其中一个category相同。换句话说,Intent中如果出现了擦特工容易,不管有几个category,他都必须是过滤规则中定义了的。当然,如果Intent中没有定义,也可以匹配成功。

data的匹配规则

匹配规则和action类似,如果过滤规则中定义了data,那么intent中必须也要定义可匹配的data。因为data的结构比较复杂,建议自行去查阅一下相关资料,学习一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android