收藏 分享(赏)

第4章Android生命周期.ppt

上传人:Facebook 文档编号:3424516 上传时间:2018-10-27 格式:PPT 页数:64 大小:1.17MB
下载 相关 举报
第4章Android生命周期.ppt_第1页
第1页 / 共64页
第4章Android生命周期.ppt_第2页
第2页 / 共64页
第4章Android生命周期.ppt_第3页
第3页 / 共64页
第4章Android生命周期.ppt_第4页
第4页 / 共64页
第4章Android生命周期.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、第4章 Android生命周期,主讲:赵建勋,本章学习目标,了解Android系统的进程优先级的变化方式了解Android系统的四大基本组件了解Activity的生命周期中各状态的变化关系掌握Activity事件回调函数的作用和调用顺序掌握Android应用程序的调试方法和工具,4.1 程序生命周期,程序的生命周期 程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android程序启动到停止的全过程 程序的生命周期由Android系统进行调度和控制的,4.1 程序生命周期,Android系统中的进程优先级由高到低 前台进程 可见进程 服务进程 后台进程 空进程,4.1

2、程序生命周期,前台进程 前台进程是Android系统中最重要的进程,是与用户正在交互的进程,包含以下四种情况 进程中的Activity正在与用户进行交互 进程服务被Activity调用,而且这个Activity正在与用户进行交互 进程服务正在执行生命周期中的回调函数,如onCreate()、onStart()或onDestroy() 进程的BroadcastReceiver正在执行onReceive()函数 Android系统在多个前台进程同时运行时,可能会出现资源不足的情况,此时会清除部分前台进程,保证主要的用户界面能够及时响应,4.1 程序生命周期,可见进程 可见进程指部分程序界面能够被用

3、户看见,却不在前台与用户交互,不响应界面事件的进程 如果一个进程包含服务,且这个服务正在被用户可见的Activity调用,此进程同样被视为可见进程 Android系统一般存在少量的可见进程,只有在特殊的情况下,Android系统才会为保证前台进程的资源而清除可见进程,4.1 程序生命周期,服务进程 服务进程是指包含已启动服务的进程 没有用户界面 在后台长期运行 Android系统除非不能保证前台进程或可视进程所必要的资源,否则不强行清除服务进程,4.1 程序生命周期,后台进程 后台进程是指不包含任何已经启动的服务,而且没有任何用户可见的Activity的进程 Android系统中一般存在数量较

4、多的后台进程,在系统资源紧张时,系统将优先清除用户较长时间没有见到的后台进程,4.1 程序生命周期,空进程 空进程是不包含任何活跃组件的进程 空进程在系统资源紧张时会被首先清除 但为了提高Android系统应用程序的启动速度,Android系统会将空进程保存在系统内存用,在用户重新启动该程序时,空进程会被重新使用 除了以上的优先级外,以下两方面也决定他们的优先级 进程的优先级取决于所有组件中的优先级最高的部分 进程的优先级会根据与其他进程的依赖关系而变化,4.2 Android组件,组件是可以调用的基本功能模块,Android应用程序就是由组件组成的Android系统有四个重要的组件,分别是A

5、ctivity、Service、BroadcaseReceiver和ContentProvider,4.2 Android组件,Activity Activity是Android程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件 Android应用程序可以包含一个或多个Activity,一般在程序启动后会呈现一个Activity,用于提示用户程序已经正常启动 在界面上的表现形式:全屏窗体,非全屏悬浮窗体,对话框Service Service用于没有用户界面,但需要长时间在后台运行的应用,4.2 Android组件,BroadcaseReceiver BroadcaseRece

6、iver是用来接受并响应广播消息的组件 不包含任何用户界面 可以通过启动Activity或者Notification通知用户接收到重要信息 Notification能够通过多种方法提示用户,包括闪动背景灯、震动设备、发出声音或在状态栏上放置一个持久的图标,4.2 Android组件,ContentProvider ContentProvider是Android系统提供的一种标准的共享数据的机制,应用程序可以通过ContentProvider访问其他应用程序的私有数据 私有数据可以是存储在文件系统中的文件,也可以是SQLite中的数据库 Android系统内部也提供一些内置的ContentPro

7、vider,能够为应用程序提供重要的数据信息,4.2 Android组件,组件生命周期 所有Android组件都具有自己的生命周期,是从组件建立到组件销毁的整个过程 在生命周期中,组件会在可见、不可见、活动、非活动等状态中不断变化,4.3 Activity生命周期,Activity生命周期 Activity生命周期指Activity从启动到销毁的过程 Activity表现为四种状态,分别是活动状态、暂停状态、停止状态和非活动状态 活动状态,Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互 暂停状态,Activity在界面上被部分遮挡,该Activity不再处于用户界

8、面的最上层,且不能够与用户进行交互 停止状态,Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡 非活动状态,不在以上三种状态中的Activity则处于非活动状态,4.3 Activity生命周期,Activity的四种状态的变换关系图,4.3 Activity生命周期,Activity栈 遵循“后进先出”的规则,4.3 Activity生命周期,事件的回调函数,4.3 Activity生命周期,Activity生命周期的事件回调函数,4.3 Activity生命周期,Activity状态保存/恢复的事件回调函数,4.3 Activity生命

9、周期,Activity事件回调函数的调用顺序Activity生命周期分类 Activity的生命周期可分为全生命周期、可视生命周期和活动生命周期 每种生命周期中包含不同的事件回调函数,4.3 Activity生命周期,全生命周期 全生命周期是从Activity建立到销毁的全部过程,始于onCreate(),结束于onDestroy() 使用者通常在onCreate()中初始化Activity所能使用的全局资源和状态,并在onDestroy()中释放这些资源 在一些极端的情况下,Android系统会不调用onDestroy()函数,而直接终止进程,4.3 Activity生命周期,可视生命周期

10、可视生命周期是Activity在界面上从可见到不可见的过程,开始于onStart(),结束于onStop(),4.3 Activity生命周期,可视生命周期 onStart()一般用来初始化或启动与更新界面相关的资源 onStop()一般用来暂停或停止一切与更新用户界面相关的线程、计时器和服务 onRestart()函数在onSart()前被调用,用来在Activity从不可见变为可见的过程中,进行一些特定的处理过程 onStart()和onStop()会被多次调用 onStart()和onStop()也经常被用来注册和注销BroadcastReceiver,4.3 Activity生命周期,

11、活动生命周期 活动生命周期是Activity在屏幕的最上层,并能够与用户交互的阶段,开始于onResume(),结束于onPause() 在Activity的状态变换过程中onResume()和onPause()经常被调用,因此这两个函数中应使用更为简单、高效的代码,4.3 Activity生命周期,活动生命周期 onPause()是第一个被标识为“可终止”的函数 在onPause()返回后,onStop()和onDestroy()随时能被Android系统终止 onPause()常用来保存持久数据,如界面上的用户的输入信息等,4.3 Activity生命周期,onPause()和onSave

12、InstanceState()的区别这两个函数都可以用来保存界面的用户输入数据,他们的区别在于 onPause()一般用于保存持久性数据,并将数据保存在存储设备上的文件系统或数据库系统中的 onSaveInstanceState()主要用来保存动态的状态信息,信息一般保存在Bundle中 Bundle是能够保存多种格式数据的对象 在onSaveInstanceState()保存在Bundle中的数据,系统在调用onRestoreInstanceState()和onCreate()时,会同样利用Bundle将数据传递给函数,4.3 Activity生命周期,举例:建立一个新的Android工程

13、工程名称:ActivityLifeCycle 包名称:edu.zhzhu.ActivityLifeCycle Activity名称:ActivityLifeCycle,4.3 Activity生命周期,ActivityLifeCycle.java文件的代码,4.3 Activity生命周期,ActivityLifeCycle.java文件的代码,4.3 Activity生命周期,ActivityLifeCycle.java文件的代码,4.3 Activity生命周期,ActivityLifeCycle.java文件的代码上面的程序主要通过在生命周期函数中添加“日志点”的方法进行调试,程序的运行

14、结果将会显示在LogCat中 为了显示结果易于观察和分析,在LogCat设置过滤器LifeCycleFilter,过滤方法选择by Log Tag,过滤关键字为LIFTCYCLE,4.3 Activity生命周期,全生命周期 启动和关闭ActivityLifeCycle 的LogCat输出 启动ActivityLifeCycle 按下模拟器的“返回键” 关闭ActivityLifeCycle LogCat输出结果,4.3 Activity生命周期,全生命周期 函数的调用顺序:onCreate() onStart() onResume() onPause() onStop() onDestroy

15、()调用onCreate()函数分配资源 调用onStart()将Activity显示在屏幕上 调用onResume()获取屏幕焦点 调用onPause()、onStop()和onDestroy(),释放资源并销毁进程,4.3 Activity生命周期,可视生命周期 状态转换 启动ActivityLifeCycle 按“呼出/接听键”启动内置的拨号程序 再通过“返回键”退出拨号程序 ActivityLifeCycle重新显示在屏幕中 可视生命周期的LogCat输出结果,4.3 Activity生命周期,可视生命周期 函数的调用顺序: onSaveInstanceState () onPause

16、() onStop() onRestart() onStart() onResume()调用onSaveInstanceState()函数保存Activity状态 调用onPause()和onStop(),停止对不可见Activity的更新 调用onRestart()恢复需要界面上需要更新的信息 调用onStart()和onResume()重新显示Activity,并接受用户交互,4.3 Activity生命周期,可视生命周期 开启IDA的可视生命周期:Dev Tools Development Settings Immediately destroy activities (IDA)下开启I

17、DA,4.3 Activity生命周期,可视生命周期 开启IDA的可视生命周期的函数调用顺序:onSaveInstanceState() onPause() onStop() onDestroy() onCreate() onStart() onRestoreInstanceState() onResume()调用onRestoreInstanceState()恢复Activity销毁前的状态 其他的函数调用顺序与程序启动过程的调用顺序相同,4.3 Activity生命周期,活动生命周期 活动生命周期的LogCat输出 启动ActivityLifeCycle 通过“挂断键”使模拟器进入休眠状态

18、 再通过“挂断键”唤醒模拟器 LogCat的输出结果,4.3 Activity生命周期,活动生命周期 函数调用顺序如下:onSaveInstanceState() onPause() onResume()调用onSaveInstanceState ()保存Activity的状态 调用onPause()停止与用户交互 调用onResume()恢复与用户的交互,4.4 程序调试,Android系统提供了两种调试工具LogCat和DevTools,用于定位、分析及修复程序中出现的错误 4.4.1 LogCat LogCat是用来获取系统日志信息的工具,并可以显示在Eclipse集成开发环境中 功能:

19、能够捕获的信息包括Dalvik虚拟机产生的信息、进程信息、ActivityManager信息、PackagerManager信息、Homeloader 信息、WindowsManager信息、Android运行时信息和应用程序信息等,4.4 程序调试,4.4.1 LogCat 打开方式:Window Show View Other打开Show View的选择菜单,然后在Andoird LogCat中选择LogCat,4.4 程序调试,4.4.1 LogCat LogCat打开后,便显示在Eclipse的下方区域,4.4 程序调试,4.4.1 LogCat LogCat的右上方的五个字母表示五种

20、不同类型的日志信息 ,他们的级别依次增高 V:详细(Verbose)信息 D:调试(Debug)信息 I:通告(Info)信息 W:警告(Warn)信息 E :错误(Error)信息,4.4 程序调试,4.4.1 LogCat 在LogCat中,用户可以通过五个字母图标选择显示的信息类型,级别高于所选类型的信息也会在LogCat中显示,但级别低于所选类型的信息则不会被显示,4.4 程序调试,4.4.1 LogCat LogCat提供了“过滤”功能,在右上角的“+”号和“-”号,分别是添加和删除过滤器。用户可以根据日志信息的标签(Tag)、产生日志的进程编号(Pid)或信息等级(Level),对

21、显示的日志内容进行过滤,4.4 程序调试,4.4.1 LogCat 程序调试原理 引入android.util.Log包 使用Log.v()、 Log.d()、 Log.i() 、Log.w() 和 Log.e()五个函数在程序中设置“日志点” 当程序运行到“日志点”时,应用程序的日志信息便被发送到LogCat中 判断“日志点”信息与预期的内容是否一致 进而判断程序是否存在错误Log.v()用来记录详细信息,Log.d()用来记录调试信息,Log.i()用来记录通告信息, Log.w()用来记录警告信息,Log.e()用来记录通错误信息,4.4 程序调试,4.4.1 LogCat 演示了Log

22、类的具体使用方法,4.4 程序调试,4.4.1 LogCat程序第5行引入android.util.Log包 第8行定义标签。标签帮助用户在LogCat中找到目标程序生成的日志信息,同时也能够利用标签对日志进行过滤 第14行记录一个详细信息,Log.v()函数的第一个参数是日志的标签,第二个参数是实际的信息内容 第15行到第18行分别产生了调试信息、通告信息、警告信息和错误信息,4.4 程序调试,4.4.1 LogCat LogCat工程的运行结果LogCat对不同类型的信息使用了不同的颜色加以区别,4.4 程序调试,4.4.1 LogCat 添加过滤器 单击“+” 填入过滤器的名称:Logc

23、atFilter 设置过滤条件为“标签=LOGCAT”,4.4 程序调试,4.4.1 LogCatLogCat过滤后的输入结果无论什么类型的日志信息,属于哪一个进程,只要标签为LOGCAT,都将显示在LogcatFilter区域内,4.4 程序调试,4.4.2 DevTools DevTools是用于调试和测试的工具 包括了一系列用户各种用途的小工具:Development Settings、Exception Browser、Google Login Service、Instrumentation、Media Scanner、Package Browser、Pointer Location、

24、Raw Image Viewer、Running processes和Terminal Emulator,4.4 程序调试,4.4.2 DevTools DevTools的使用界面,4.4 程序调试,4.4.2 DevToolsDevelopment Settings Development Settings中包含了程序调试的相关选项 单击功能前面选择框,出现绿色的“对号”表示功能启用 模拟器会自动保存设置,4.4 程序调试,4.4.2 DevTools Development Settings选项,4.4 程序调试,4.4.2 DevTools,4.4 程序调试,4.4.2 DevTools

25、 Package Browser Package Browser是Android系统中的程序包查看工具,能够详细显示已经安装到Android系统中的程序信息,包括包名称、应用程序名称、图标、进程、用户ID、版本、apk文件保存位置和数据文件保存位置 进一步查看应用程序所包含Activity、Service、BroadcastReceiver和Provider的详细信息,4.4 程序调试,4.4.2 DevTools Package Browser查看ActivityLifeCycle程序的相关信息,4.4 程序调试,4.4.2 DevTools Pointer Location Pointer

26、 Location是屏幕点位置查看工具,能够显示触摸点的X轴坐标和Y轴坐标 Pointer Location的使用画面,4.4 程序调试,4.4.2 DevTools Running processes Running processes能够查看在Android系统中正在运行的进程,并能查看进程的详细信息,包括进程名称和进程所调用的程序包 Andoird模拟器缺省情况下运行的进程和com.android.phone进程的详细信息,4.4 程序调试,4.4.2 DevTools Andoird模拟器缺省情况下运行的进程,com.android.phone进程的详细信息,4.4 程序调试,4.4.

27、2 DevTools Terminal Emulator Terminal Emulator可以打开一个连接底层Linux系统的虚拟终端,但具有的权限较低,且不支持提升权限的su命令 如果需要使用root权限的命令,可以使用ADB工具 右图是Terminal Emulator运行时的画面,输入ls命令,显示出根目录下的所有文件夹,习题:,1. 简述Android系统前台进程、可见进程、服务进程、后台进程和空进程的优先级排序原因。 2. 简述Android系统的四种基本组件Activity、Service、BroadcaseReceiver和ContentProvider的用途。 3. 简述Activity生命周期的四种状态,以及状态之间的变换关系。 4. 简述Activity事件回调函数的作用和调用顺序。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报