Android四大基本组件之 Activity
Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。
它是 android 应用程序的基本功能单元。Activity 本身是没有界面的。所以activity类创建了一个窗体,开发者能够通过setContentView(View)接口把UI放到activity创建的窗体上。当activity指向全屏窗体时,也能够用其它方式实现:作为漂浮窗体(通过windowIsFloating的主题集合)。或者嵌入到其它的activity(使用ActivityGroup)。activity是单独的,用于处理用户操作。
差点儿全部的activity都要和用户打交道
一个应用程序通常由多个activities组成,他们一般是松耦合关系。通常,一个应用程序中的activity被指定为"main"activity,当第一次启动应用程序的时候呈现给用户的那个activity。每个activity然后能够启动还有一个activity为了完毕不同的动作。每一次一个activity启动,前一个activity就停止了,可是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶。取得用户焦点。Back Stack符合简单“后进先出”原则,所以。当用户完毕当前activity然后点击backbutton,它被弹出栈(而且被摧毁),然后之前的activity恢复。
当一个activity因新的activity启动而停止。它被通知这样的状态转变通过activity的生命周期回调函数。有很多回调函数一个activity可能会收到。源于它自己的状态变化-不管系统创建它、停止它、恢复它、摧毁它-而且每一个回调提供你完毕适合这个状态的指定工作的机会。
比如,当停止的时候,你的activity应该释放不论什么大的对象,比如网络数据库连接。
当activity恢复。你能够又一次获得必要的资源和恢复被中断的动作。这些状态转换都是activity的生命周期的部分。
【Activity生命周期】

public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
在一个Activity正常启动过程中,这些方法调用的顺序是onCreate -> onStart -> onResume;
在Activity被kill掉的时候方法顺序是onPause -> onStop -> onDestroy,此为一个完整的Lifecycle。
那么对于中断处理(比方电话来了),则是onPause -> onStop。恢复时onStart -> onResume;假设当前应用程序的是一个Theme为Translucent(半透明) 或者Dialog 的Activity那么中断就是onPause ,恢复的时候onResume。
那么对于”Other app need memory”,就是我们手机在执行一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断。优先去服务电话的基本功能,另外系统也不同意你占用太多资源,至少要保证一些功能(比方电话),所以资源不足的时候也就有可能被kill掉。
【Activity中的方法】
onCreate:在这里创建界面,做一些数据的初始化工作;能够通过setContentView(View)接口把UI放到activity创建的窗体上
onStart: 到这一步变成“用户可见不可交互”的状态;
onResume:变成和用户可交互的。(在Activity栈系统通过栈的方式管理这些Activity,即当前Activity在栈的最上端,执行完弹出栈,则回到上一个Activity)。
onPause:到这一步是可见但不可交互的。系统会停止动画等消耗CPU的事情。从上文的描写叙述已经知道。应该在这里保存你的一些数据,由于这个时候你的程序的优先级减少。有可能被系统收回。
在这里保存的数据,应该在onResume里读出来。
onStop:变得不可见 ,被下一个activity覆盖了
onDestroy:这是Activity被kill前最后一个被调用方法了,可能是其它类调用finish方法或者是系统为了节省空间将它临时性的干掉。能够用isFinishing()来推断它。假设你有一个Progress Dialog在线程中执行,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常。
onPause,onstop, onDestroy,三种状态下 activity都有可能被系统kill 掉。
【Activity中的通信】
在 Android 中。不同的 Activity 实例可能执行在一个进程中,也可能执行在不同的进程中。因此我们须要一种特别的机制帮助我们在 Activity 之间传递消息。Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包括有这个消息的目的地。还能够包括消息的内容,这好比一封 Email,当中不仅应该包括收件地址。还能够包括详细的内容。对于一个 Intent 对象。消息“目的地”是必须的,而内容则是可选项。
Intent负责对操作的动作、动作涉及数据、附加数据进行描写叙述,Android则依据此Intent的描写叙述,负责找到相应的组件,将 Intent传递给调用的组件。并完毕组件的调用。
因此,Intent在这里起着一个媒体中介的作用。专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
在应用中,我们能够以两种形式来使用Intent:
直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context, Class)来指定)。
通过指定详细的组件类,通知应用启动相应的组件。
间接Intent:没有指定comonent属性的Intent。这些Intent须要包括足够的信息,这样系统才干依据这些信息。在在全部的可用组件中,确定满足此Intent的组件。
对于直接Intent,Android不须要去做解析。由于目标组件已经非常明白。
Android须要解析的是那些间接Intent,通过解析,将 Intent映射给能够处理此Intent的Activity、IntentReceiver或Service。
Intent解析机制主要是通过查找已注冊在AndroidManifest.xml中的全部IntentFilter及当中定义的Intent,终于找到匹配的Intent。
【Activity中Intent Filter】
Intent Filter 描写叙述了一个组件愿意接收什么样的 Intent 对象。Android 将其抽象为 android.content.IntentFilter 类。
在 Android 的 AndroidManifest.xml 配置文件里能够通过 <intent-filter >节点为一个 Activity 指定其 Intent Filter,以便告诉系统该 Activity 能够响应什么类型的 Intent。
当使用 startActivity(intent) 来启动另外一个 Activity 时,假设直接指定 intent 对象的 Component 属性,那么 Activity Manager 将试图启动其 Component 属性指定的 Activity。否则 Android 将通过 Intent 的其他属性从安装在系统中的全部 Activity 中查找与之最匹配的一个启动,假设没有找到合适的 Activity。应用程序会得到一个系统抛出的异常。
这个匹配的步骤例如以下:

【Activity的栈式管理】

当在程序中调用 Activity.finish()方法时。结果和用户按下 BACK 键一样:它告诉 Activity Manager该Activity实例能够被“回收”。
随后 Activity Manager 激活处于栈第二层的 Activity ,把原 Activity 压入到栈的第二层,从 Running 状态转到 Paused 状态。
【Activity的载入模式】
standard、singleTop、singleTask、singleInstance(当中前两个是一组、后两个是一组),默觉得standard
standard:就是intent将发送给新的实例。所以每次跳转都会生成新的activity。
singleTop:也是发送新的实例,但不同standard的一点是。在请求的Activity正好位于栈顶时(配置成singleTop的Activity)。不会构造新的实例
singleTask:和后面的singleInstance都仅仅创建一个实例,当intent到来,须要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。假设有直接将intent发送给它。
singleInstance:首先说明一下task这个概念,Task能够觉得是一个栈,可放入多个Activity。比方启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity。那在它的界面上调用其它的Activity也仅仅是在这个task里面。那假设在多个task中共享一个Activity的话怎么办呢。
举个例来说,假设开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时。显示的就是刚才的地图。实际上是同一个Activity,实际上这就引入了singleInstance。singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中仅仅有这一个Activity。不同应用的intent都由这个Activity接收和展示,这样就做到了共享。当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键。假设按下了返回键,则无效。
【Activity的跳转】
Activity跳转,无返回结果
这是最简单的Activity跳转方式。从一个Activity启动还有一个Activity,直接startActivity(new Intent(当前Activity.this, 下一Activity.class))。
Activity跳转,返回数据/结果
须要返回数据或结果的,则使用startActivityForResult (Intent intent, int requestCode),requestCode的值是自己定义的,用于识别跳转的目标Activity。
跳转的目标Activity所要做的就是返回数据/结果。setResult(int resultCode)仅仅返回结果不带数据。或者setResult(int resultCode, Intent data)两者都返回!而接收返回的数据/结果的处理函数是onActivityResult(int requestCode, int resultCode, Intent data),这里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode。返回的数据在data里面。
** 注意。在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法运行原来Activity的onActivityResult函数,看到当前的Activity没反应
最后说一下activity中怎样给控件绑定监听器
有四个步骤:1.获代替表控件的对象;2.定义一个类实现监听器接口;3.生成监听器对象;4.为控件绑定监听器对象。
Android四大基本组件之 Activity的更多相关文章
- Android四大基本组件介绍与生命周期
Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...
- Android四大基本组件
Android四大基本组件分别是 Activity:整个应用程序的门面,负责与用户进行交互. Service:承担大部分工作. Content Provider内容提供者:负责对外提供数据,并允许需要 ...
- 【转】Android四大基本组件介绍与生命周期
转自:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html Android四大基本组件分别是Activity,Serv ...
- Android四大基本组件介绍及生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.了解四大基本组件 Activity ...
- android四大功能组件概要总结
1.activity 某一个activity对应于app中的一个具体的页面.而intent是具些activity都具有的同类型操作的抽象,比如Main View Edit PICK 已及所对应的数据 ...
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
转载于:http://blog.csdn.net/byxdaz/article/details/9708491 http://blog.csdn.net/q876266464/article/deta ...
- Android 四大组件之三(广播)
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- 17.(转) Android之四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...
- Android基础_1 四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),BroadcastReceiver(广播接收器). 一.四大基本组件 Acti ...
随机推荐
- 关于 Unity 版本升级后可能会引起偶发光照图错乱的问题
近期项目遇到一个奇怪的问题,使用 Unity 2017 版本升级后,团队中某些人的机器光照图总是不正确,而有的人是正确的,一直不知道为什么. 为了查到这个奇怪问题的原因,首先查看了美术的在 Max 中 ...
- 创建模态提醒窗口(UIAlertView)
UIAlertView类创建一个简单的模态提醒窗口,可能包含消息.按钮以及文本框.模态UI元素要求用户必须与之交互(通常是按下按钮)后才能做其它事情.它们通常位于其他窗口前面,在可见时禁止用户与其他任 ...
- 【树链剖分/倍增模板】【洛谷】3398:仓鼠找sugar
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- python开发_python操作mysql数据库
如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装 本篇blog是有关python操作mysql数据的相关内容. 我做了一个demo: 先看运行效果: mys ...
- 51nod 1040 最大公约数之和 欧拉函数
1040 最大公约数之和 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 Description 给 ...
- iOS 反反注入 修改__RESTRICT,__restrict工具
通过在 Xcode 里的 Other Linker Flags 设置参数,可以防止App被注入dylib(仅限于iOS 10 以下系统) 比如,某艺,XX音乐等 dylib无法注入,也就意味着没办法 ...
- ASM相关视图
oracle asm对于我们并非一个黑盒子 ,我们能够通过对应视图查看asm instance信息,和oracle系统视图一样. v$asm_diskgroup x$kfgrp 记录diskgrou ...
- TortoiseSVN 冲突解决详细步骤 (图)
冲突还是很好解决的,但我没有试过在IDE里边集成怎样.记得VSS在Visual Studio里边解决冲突就非常完美,冲突自动报告,自动弹出冲突解决窗口,让你处理该怎么合并两份版本.合并后自动签入com ...
- u3d移动游戏优化规范
1.顶点性能一般来说,如果您想在iPhone 3GS或更新的设备上每帧渲染不超过40,000可见点,那么对于一些配备 MBX GPU的旧设备(比如,原始的 iPhone,如 iPhone 3g和 iP ...
- Ubuntu删除文件夹的命令
1. 删除文件夹的内容包括文件夹: rm -rf 文件夹的名字 (-r 是 循环的意思, f是不询问的意思) 2 .删除文件夹的内容不包括文件夹: rm -rf 文件夹的名字/* ...