android 四大组件之activity
来源:互联网 发布:python 自动化 工业 编辑:程序博客网 时间:2024/05/23 00:00
Activity是一个独立的,可以与用户交互的android应用组件。他是一个功能强大的界面管理者,他负责调度各种界面视图,帮助开发人员完成android应用与用户之间的交流。Android应用就像一出戏,activity就是其中的一幕,用户界面就是舞台,Activity不仅仅要负责舞台上的表演,还要负责相关的灯光,音乐等,协调各个部分把戏演好。
一、Activity的生命周期
Activity 组件和java EE中的Servlet 组件一样,属于托管代码,即它的创建和销毁不是由组件自身或者用户来决定的,而是由它的运行的环境,或者说是容器决定。所以我们不能改变它,只能适应它。
Activity的生命周期: onCreate()——>onResume()——>onPaused()——>onStop()——>onDestory().
- onCreate:在这里创建界面,做一些数据的初始化工作,所以要避免在这里做太多的任务。可以延迟到onStart或onResume
- onStart:到这一步变成用户可见不可交互的。
- onResume:变成和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)
- onPause:到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在 onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动。
- onstop:变得不可见,被下一个activity覆盖了
- onDestroy:这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用 isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。
在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate -> onStart ->onResume。在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期,但是有人问了,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop ,恢复的时候onStart->onResume ,如果打断这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复的时候onResume 。
二、Activity的管理
Android系统中可以运行多个android应用,每个andorid应用又可以包含多个activity,那个android是如何管理这些activity的呢?事实上,android是通过栈的方式来管理的activity的。当用户打开一个activity,就会把当前的activity压入栈顶;当用户操作返回按钮,就相当于把当前的activity销毁,则此activity将从栈中抛出。
为什么采用这种堆栈的方式来管理activity呢?这是由于android特有的运行环境和运行方式决定的,因为手机屏幕狭小,每次只能显示一个activiy用户界面,所以,android按照使用时间从近到远的顺序将屏幕对应的activity保存在堆栈中,使得系统中的程序得到最合理的缓存,将大大提高系统的响应速度。
三、activity被系统回收
注意:①当设备冲横屏切换到竖屏时,android会将当前的activiity销毁,重新创建一个新的activity。OnCreate被重新执行。
解决办法是:在AndroidMainfest,xml中配置一下activity属性:
android:configChanges="orientation|keyboardHidden";
②当系统资源紧张时,activity很可能会被杀死,以便回收系统资源。这种情况下,当activity再次被请求时,activity将重新被创建。
解决办法是:
//在onSaveInstanceSate方法中
public void onSaveInstanceSate(Bundle state){
super.onSaveInstanceSate(sate);
state.putInt("id",1);
state.putString("name","tom");
}
//在OnCreate方法中
public void OnCreate(Bundle state){
if(sate!=null){
int id = state.getInt("id");
int name = state.getString("name");
}
}
三、activity与其它组件之间的交互
activity 之间的交互是通过Intnet组件来完成的,Intent 是要执行动作的抽象描述,它可以通过startactivity()启动新的activity,sendBroadcast发送给任何有兴趣的BroadcastReceiver组件和Context.startService()与service组件进行通信。这里就不做详细讲解。
四、activity的启动模式
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Activity启动模式设置:<activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四种启动模式:1. standard:默认模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
2. singleTop:如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
3. singleTask:如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 4. singleInstance:在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。activity的启动模式详细介绍:http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html
0 0
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之 Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android 四大组件之Activity
- android 四大组件之activity
- Android 四大组件之 Activity
- android四大组件之Activity
- 信息安全基础知识(四)KDC、公用密钥加密和证书:
- LeetCode[String]: Add Binary
- hdu2159——FATE
- 多个ViewController之间传值
- mongodb 文档的嵌入和引用
- android 四大组件之activity
- struts2中的类型转换,从web页面传来的离散的值在后台封装成一个user对象
- c++ 35虚函数与多态(二)
- 安卓遇见最奇葩的错
- Android SDK开发包国内下载地址
- C语言中define的用法
- UIWebView内容搜索并且显示高亮背景颜色
- 边记边学PHP-(七)HTML语言设计注册界面及传递信息的实现
- HDU 1429 BFS+状态压缩