说到Android四大组件,相信都会说
一:Activity
二:Service
三:Broadcast Receiver 广播
四:Content Provider 内容提供者
下面我们主要说的是 我对Activity 的理解
1: 先说一下概念 什么是Activity呢?
Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。它是 android 应用程序的基本功能单元。Activity 本身是没有界面的。所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity(使用ActivityGroup)。activity是单独的,用于处理用户操作。几乎所有的activity都要和用户打交道,
2:看Activity生命周期 看张图片 有助于理解
重点 理解 运行顺序
OnCreate()当程序被第一次启动,会调用 OnCreate()生命周期方法 创建应用 ,在这里可以做初始化的一些操作
OnStart() 当程序被创建 会调用OnStart() 准备运行 方法 这时,Activity已经可见了 不过是在后台;
OnResume() 可见的 可做获取焦点 的 操作 这时 Actiivity 完全可见 在前端 然后服务运行起来了
OnPause() 准备暂停 这里 可以做存储数据的操作但是不能太耗时 失去焦点
OnStop() 准备停止 可做一些微量的回收操作
OnDestroy() 准备销毁 在这里 可以做释放内存 杀死程序的操作
OnRestart() 准备再次运行
这里提供一个简单的 运行 示例
应用运行时 然后按home 键 回到桌面 OnPause() 再次启动应用 OnResume()
应用运行时 按返回键 回到桌面 OnPause() OnStop() 再次启动应用 OnRestart() OnStart() OnResume()
当应用处于停止状态 OnStop() 如果优先级高的应用需要内存 就会杀死 如果再次运行该应用就会重新 回调OnCreate()
3:Activity的两种启动方式
(1):startActivity(intent) 参数 Intent对象
(2):startActivityForResult(Intent intent, int requestCode) 参数一:Intent对象 参数二:请求码
需要知道的是 跳转过去的 Activity 回传数据的时候 写 setResult(int resultCode, Intent intent) ;参数一:结果码 参数二:Intent对象
onActivityResult(int requestCode, int resultCode, Intent data)方法 这里可以接受返回的参数值
4: activity的四种加载模式
一:standard 标准模式 系统默认的模式 后进先出的栈结构
每启动一个Activity都会重新创建一个新的Activity 与任务栈,被谁启动的Activity的任务栈就会存在谁的任务栈中
二:singleTop 栈顶复用模式
如果一个Activity 已经在任务栈的栈顶,那么不会重新创建,不会调用它的OnCreate() OnStart() 因为状态没有发生过变化,但是 会调用OnNewIntent(),通过这个方法 可以取出当前请求的信息。
如果Acitivity不是位于栈顶 那么就会重现创建。
三: singleTask 栈内复用模式 也称内单例模式
如果一个Activity已经存在,系统不会重新创建,也会调用OnNewIntent(). 当Activity被创建且以singleTask模式启动,首先寻找属于它的任务栈,不存在就创建,存在就判断是否有它的实例存在,不存在 创建实例 存在 会调到栈顶 同样 调用OnNewIntent()
四:singleInstance 单实例模式 也称全局单例模式
具有singleTask的全部特性,每个Activity都会有一个单独属于它的任务栈存在,无论系统如何调用,都只有一个独立的任务栈,复用性强,除非任务栈被销毁了。