Activity及生命周期

上传人:20****03 文档编号:178993862 上传时间:2021-04-07 格式:DOC 页数:24 大小:196KB
返回 下载 相关 举报
Activity及生命周期_第1页
第1页 / 共24页
Activity及生命周期_第2页
第2页 / 共24页
Activity及生命周期_第3页
第3页 / 共24页
Activity及生命周期_第4页
第4页 / 共24页
Activity及生命周期_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Activity及生命周期》由会员分享,可在线阅读,更多相关《Activity及生命周期(24页珍藏版)》请在金锄头文库上搜索。

1、Android Activity生命周期 一般来说Android程序主要由下列4部分组成 Activity Broadcast Receiver Service Content ProviderActivity 介绍 一个应用程序是由一个或者多个Activity组成 一个Activity代表了可以和用户进行交互的可视化界面。 Activity在Android应用的onCreate中 初始化通过布局管理添加各种View组件 通过setContentView(int) 方法可以将视图呈现出来 Broadcast Receiver介绍 Broadcast Receiver负责对外部事件做出响应 Br

2、oadcast Receiver不生成UI,是不可见的 Broadcast Receiver需要在程序中进行注册 应用程序可以通过Context.sendBroadcast()将自己的intent广播出去。其他程序通过自身的Broadcast Receivers截获后进行时间处理。Service 介绍 service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。比如下载数据,播放音乐等。 service是跑在程序的主线程中,处理耗时的事件续 service没有用户界面 所有用户实现的service必须继承系统的Service类,并且在配置文件中进行注册。Content Provi

3、der 介绍 数据在Android当中是程序私有的 Content Provider提供了多个程序间数据交互的机制。 Content Provider暴露出来一些标准的API来对数据进行操作:1. query(Uri, String, String, String,String) :通过关键字查询数据2. insert(Uri, ContentValues) :将一组数据插入到指定的地方3. update(Uri, ContentValues, String, String) :更新数据4. delete(Uri, String, String) :删除数据Activity其实是继承了Appl

4、icationContext这个类,我们可以重写以下方法,如下代码: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(); 便于理解上

5、图示中的生命周期见HelloAndroidActivity.java.我们运行调试。 通过图示和分析程序得出三种生命周期:1. 整体生命周期:onCreate()-.- onDestory();2. 可视生命周期:onStart-.- onStop();3. 活动生命周期(或者称为焦点生命周期):onResume()-.- onPause();1、程序启动运行Activity执行顺序:onCreate()-onStart()-onResume三个方法,见LogCat 。程序启动。2、BACK键等退出销毁,Activity先后执行: onPause()-onStop()-onDestory()三

6、个方法,见LogCat。程序销毁退出。3、HOME键等运行中被打断时(比如突然打入电话),Activity先后执行: onPause()-onStop()这两个方法。此时程序并未退出,只是在保存于后台状态栈中。 4、再次启动应用程序时,则先后分别执行了onRestart()-onStart()-onResume()三个方法,重新调出程序到前台显示。!引出一个问题,当我们按HOME键或程序运行中被打断时,我们应用的状态如何保存 (举例)? (见演示) 几点总结:onCreate: 在这里创建界面 ,做一些数据的初始化工作。onStart: 到这一步变成用户可见不可交互的。onResume: 变成

7、和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)onPause: 到这一步是可见但不可交互 的,系统会停止动画等消耗CPU 的事情,从上文演示中已经知道,应该在这里保存一些数据,因为这个时候本程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动 onstop: 变得不可见 ,被下一个activity覆盖了 onDestroy:这是activity被干掉前最后一个被调用方法了,可能是外面类调

8、用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。 由上:由于android系统中,Activit生命周期、内存管理等都是交给系统自动管理的,实际工作中因为生命周期的变化而带来的问题也很多,onPause,onstop, onDestroy三种状态 下activity都有可能被系统管理机制给干掉,丢失数据及状态,所以为了保证程序的正确性与合理性,所以特别注意onPause()里数

9、据的处理,比如写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库,还有xml等)。当然我们一般是采用Android的消息机制 Handler,Message来处理多线程和界面交互的问题来避免这些状态丢失问题,后边讲。注意各个事件的处理,状态的保存;同时以后的开发中注意,当Activity某一个生命周期运行时间过长,占用内存过大时,注意防止被android自动内存管理回收机制给干掉。1.1 强制保持Android Activity状态有的时候我们的Android在应用运行时,可能需要临时退出,比如突然接到来电,但是切换回来界面时,可能Activity又重新从第一个界面开始显

10、 示,并不是刚才用户操作的界面,这里可以通过在androidmanifest.xml中在需要保留的activity中添加 android:alwaysRetainTaskStat=true 这句即可,这里要提醒大家的是有时候你的应用可能会产生多个实例,你还可以在主Activity中加入 android:launchMode=singleInstance 来强制让系统仅运行一个实例。2. Android开机自启动程序 背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_

11、COMPLETED。只要在程序中“捕捉”到这个消息,再启动之即可。记住,Android框架说:Dont call me, Ill call you back。我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver。 Android应用的工程文件组成 src源文件(java文件) R.java文件 assets目录 res目录(资源) drawable目录 layout目录 values目录AndroidManifest.xml 声明应用程序的构成 程序包的全局变量 活动(Activities) 内容管理器( Content Providers) 服务(

12、Services) 广播接收器(Broadcast Receivers) 请求安全授权(uses-permission) 声明安全授权(permission)AndroidManifest.xml文件剖析对于Android全局配置文件AndroidManifest.xml 完整的结构以及每个节点的作用。在我们日常的开发中都少不了下面的配置,每创建一个Activity、Service都离不开这个全局配置文件,深入的了解可以简化程序代码以及提高程序的维护性。 在最外层包含了包名、软件的版本 android:versionCode=1 以及 android:versionName=1.0 ,里面一层

13、的application分支中将可能包含Android程序的四种对象 Activity、Service、Content Provider以及Receiver。我们每添加上面四个类型中的任一新对象都需要在androidmanifest.xml文件中添加相应节点。 其中Activity的属性常用的可能为android:name和android:label但我们需要了解所有的属性以帮助解决复杂的问题,完整的如下: android:allowTaskReparenting=true | false android:alwaysRetainTaskState=true | false android:c

14、learTaskOnLaunch=true | false android:configChanges=one or more of: mcc mnc locale touchscreen keyboard keyboardHidden navigation orientation fontScale android:enabled=true | false android:excludeFromRecents=true | false android:exported=true | false android:finishOnTaskLaunch=true | false android:icon=drawable resource android:label=string resource android:launchMode=multiple | singleTop | singleTask | si

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号