1.概述
2.作用
3.生命周期
4.启动模式
5.启动方式
6.状态保存
7.与Fragment交互
8.总结
1.概述
首先我们要知道什么是Activity,就是属于Android四大组件之一:Activity、Service、BroadcastReceiver、ContentProvider。简单来说Activity其实就是一个屏幕的显示页面,但是实际上又并非那么简单:Activity代表一个窗口,而这个窗口是由其成员变量mWindow来表示,mWindow本质上是一个PhoneWindow对象,PhoneWindow继承Window抽象类,负责窗口的管理。而呈现的界面由PhoneWindow管理的DecorView对象来完成,看源码发现:DecorView是继承FrameLayout,并写着注释:This is the top-level view of the window, containing the window decor.这是窗口的顶视图,也就是整个view树的“根”。下面简单用图描述一下:
1.Activity类似一个框架,通过Window来管理,负责容器的生命周期和活动。
2.Window负责窗口的管理,窗口的绘制和渲染交给DecorView来完成。
3.DecorView是View树的根,我们平时在写布局文件layout.xml就是Contentparent的子试图。
4.layout.xml就是开发者平时定义的布局文件,最终inflate为DecorView的子组件。
2.作用
1.代表一个活动,表示要进行(展示)什么活动。
2.Activity最直接的作用就是显示界面,与用户交互。
3.控制,可以选择要显示的view,也可以从View获取数据把数据传给业务逻辑层进行处理。
3.生命周期
下面这张图我相信很多开发者都已经看过不少次:
下面通过一张表来说明一下:
注意:
1.当Activity第一次启动,执行的生命周期方法如下:onCreate->onStart->onResume。
2.当用户打开新的Activity或者切换到桌面的时候,回调的生命周期如下:onPause->onStop。
3.当用户再次回到原Activity时,回调如下:onRestart->onStart->onResume。
4.当用户按back键回退时,回调如下:onPause->onStop->onDestroy。
5.当Activity被系统回收后再次打开,onCreate->onStart->onResume。
常见场景的生命周期调用方式
4.启动模式
1.standard:标准模式,这是系统的默认模式。每次启动一个Activity都会重新创建一个新的实例。
2.singleTop:栈顶复用模式,这种模式下,新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会回调。
3.singleTask:栈内复用模式,这是一种单实例模式,这模式下只要Activity在一个栈内中存在,那么多次启动此Activity都不会重新创建实例,但是会回调其onNewIntent。
4.singleInstance:单实例模式,具有singleTask模式的所有特性,另外具有此模式的Activity只能单独地位于一个任务栈中。
四种模式的区别:
5.启动方式
1.显式启动
2.隐式启动
匹配规则如下:
6.状态保存
情况一:资源相关的系统配置发生改变导致Activity被杀死并重新创建
情况二:资源内存不足导致低优先级的Activity被杀死
解决方案:
通过onSaveInstanceState来保存当前的Activity状态,保存临时数据。
具体说明:
7.与Fragment交互
1.Activity如何传递数据到Fragment
主要用了bundle方式,例子如下:
MainActivity
Activity布局:
fragment文件
fragment布局文件
2.Fragment如何传递数据到Activity
方式:
1.接口回调
2.广播
3.EventBus
这里主要实现接口回调例子:
先定义一个接口
fragment_new布局文件:
NewFragment布局文件
MainActivity布局文件
MainActivity文件实现:
步骤就是:
1.定义一个接口
2.实现了该接口的类所创建的对象的引用赋给该接口声明的变量
3.通过该接口变量调用该实现类对象的实现的接口方法
8.总结
温故而知新。
请关注公众号,里面有更多的精彩。