【Android源码 栏目提醒】:网学会员为广大网友收集整理了,第二章 Android应用程序组件 - 综合课件,希望对大家有所帮助!
CST Information Course 2006 CST Information Course 2006 2 AndroidCST Information Course 2006 本章学习目标 ?? 了解
Android系统的进程优先级的变化方式 ?? 了解
Android系统的四大基本组件 ?? 了解Activity的生命周期中各状态的变化关系 ?? 掌握Activity事件回调函数的作用和调用顺序 ?? 掌握
Android应用程序的调试方法和工具 CST Information Course 2006 2.1 程序生命周期 ??程序的生命周期 –程序的生命周期是在
Android系统中进程从启动到终止的所有阶段也就是
Android程序启动到停止的全过程 –程序的生命周期由
Android系统进行调度和控制的 CST Information Course 2006 2.1 程序生命周期 ??
Android系统中的进程优先级由高到低 –前台进程 –可见进程 –服务进程 –后台进程 –空进程 前台进程高优先级中优先级低优先级可见进程服务进程后台进程空进程CST Information Course 2006 2.1 程序生命周期 ??前台进程 –前台进程是
Android系统中最重要的进程是与用户正在交互的进程包含以下四种情况 ??进程中的Activity正在与用户进行交互 ??进程服务被Activity调用而且这个Activity正在与用户进行交互 ??进程服务正在执行声明周期中的回调函数如onCreate、onStart或onDestroy ??进程的BroadcastReceiver正在执行onReceive函数 –
Android系统在多个前台进程同时运行时可能会出现资源不足的情况此时会清除部分前台进程保证主要的用户界面能够及时响应 CST Information Course 2006 2.1 程序生命周期 ??可见进程 –可见进程指部分程序界面能够被用户看见却不在前台与用户交互不响应界面事件的进程 –如果一个进程包含服务且这个服务正在被用户可见的Activity调用此进程同样被视为可见进程 –
Android系统一般存在少量的可见进程只有在特殊的情况下
Android系统才会为保证前台进程的资源而清除可见进程 CST Information Course 2006 2.1 程序生命周期 ??服务进程 –服务进程是指包含已启动服务的进程 ??没有用户界面 ??在后台长期运行 –
Android系统除非不能保证前台进程或可视进程所必要的资源否则不强行清除服务进程 CST Information Course 2006 2.1 程序生命周期 ??后台进程 –后台进程是指不包含任何已经启动的服务而且没有任何用户可见的Activity的进程 –
Android系统中一般存在数量较多的后台进程在系统资源紧张时系统将优先清除用户较长时间没有见到的后台进程 CST Information Course 2006 2.1 程序生命周期 ??空进程 –空进程是不包含任何活跃组件的进程 –空进程在系统资源紧张时会被首先清除 –但为了提高
Android系统应用程序的启动速度
Android系统会将空进程保存在系统内存用在用户重新启动该程序时空进程会被重新使用 –除了以上的优先级外以下两方面也决定他们的优先级 ??进程的优先级取决于所有组件中的优先级最高的部分 ??进程的优先级会根据与其他进程的依赖关系而变化 CST Information Course 2006 2.2
Android组件 ??组件是可以调用的基本功能模块
Android应用程序就是由组件组成的 ??
Android系统有四个重要的组件分别是Activity、Service、BroadcaseReceiver和ContentProvider CST Information Course 2006 2.2
Android组件 ??Activity –Activity是
Android程序的呈现层显示可视化的用户界面并接收与用户交互所产生的界面事件 –
Android应用程序可以包含一个或多个Activity一般在程序启动后会呈现一个Activity用于提示用户程序已经正常启动 –在界面上的表现形式全屏窗体非全屏悬浮窗体对话框 ??Service –Service用于没有用户界面但需要长时间在后台运行的应用 CST Information Course 2006 2.2
Android组件 ??BroadcaseReceiver –BroadcaseReceiver是用来接受并响应广播消息的组件 –不包含任何用户界面 –可以通过启动Activity或者Notification通知用户接收到重要信息 ??Notification能够通过多种方法提示用户包括闪动背景灯、震动设备、发出声音或在状态栏上放置一个持久的图标 CST Information Course 2006 2.2
Android组件 ??ContentProvider –ContentProvider是
Android系统提供的一种标准的共享数据的机制应用程序可以通过ContentProvider访问其他应用程序的私有数据 ??私有数据可以是存储在文件系统中的文件也可以是SQLite中的数据库 –
Android系统内部也提供一些内置的ContentProvider能够为应用程序提供重要的数据信息 CST Information Course 2006 2.2
Android组件 ??组件生命周期 –所有
Android组件都具有自己的生命周期是从组件建立到组件销毁的整个过程 –在生命周期中组件会在可见、不可见、活动、非活动等状态中不断变化 CST Information Course 2006 2.3 Activity生命周期 ??Activity生命周期 –Activity生命周期指Activity从启动到销毁的过程 –Activity表现为四种状态分别是活动状态、暂停状态、停止状态和非活动状态 ??活动状态Activity在用户界面中处于最上层完全能不用户看到能够与用户进行交互 ??暂停状态Activity在界面上被部分遮挡该Activity不再处于用户界面的最上层且不能够与用户进行交互 ??停止状态Activity在界面上完全不能被用户看到也就是说这个Activity被其他Activity全部遮挡 ??非活动状态不在以上三种状态中的Activity则CST Information Course 2006 2.3 Activity生命周期 ??Activity的四种状态的变换关系图 活动状态停止状态非活动状态暂停状态CST Information Course 2006
Android状态转换的回调函数 CST Information Course 2006 2.3 Activity生命周期 ??Activity栈 –遵循“后进先出”的规则 ActivityActivityActivityActivityActivity......入栈活动状态暂停状态或停止状态出栈Activity非活动状态Activity释放资源终止非活动状态Activity 栈CST Information Course 2006 2.3 Activity生命周期 ??事件的回调函数 1.public class MyActivity extends Activity 2. protected void onCreateBundle savedInstanceState 3. protected void onStart 4. protected void onRestart 5. protected void onResume 6. protected void onPause 7. protected void onStop 8. protected void onDestroy 9. CST Information Course 2006 2.3 Activity生命周期 ??Activity生命周期的事件回调函数 函数 是否 可终止 说明 onCreate 否 Activity启动后第一个被调用的函数常用来进行Activity的初始化例如创建View、绑定数据或恢复信息等。
onStart 否 当Activity显示在屏幕上时该函数被调用。
onRestart 否 当Activity从停止状态进入活动状态前调用该函数。
onResume 否 当Activity能够与用户交互接受用户输入时该函数被调用。
此时的Activity位于Activity栈的栈顶。
onPause 是 当Activity进入暂停状态时该函数被调用。
一般用来保存持久的数据或释放占用的资源。
onStop 是 当Activity进入停止状态时该函数被调用。
onDestroy 是 在Activity被终止前即进入非活动状态前该函数被调用。
CST Information Course 2006 2.3 Activity生命周期 ??Activity状态保存/恢复的事件回调函数 函数 是否 可终止 说明 onSaveInstanceState 否
Android系统因资源不足终止Activity前调用该函数用以保存Activity的状态信息供onRestoreInstanceState或onCreate恢复之用。
onRestoreInstanceState 否 恢复onSaveInstanceState保存的Activity状态信息在onStart和onResume 之间被调用。
CST Information Course 2006 2.3 Activity生命周期 ??Activity事件回调函数的调用顺序 ??Activity生命周期分类 –Activity的生命周期可分为全生命周期、可视生命周期和活动生命周期 –每种生命周期中包含不同的事件回调函数 onCreateonDestroyonStartonStoponResumeonPauseonRestoreInstanceStateonSaveInstanceStateonRestart活动生命周期可视生命周期全生命周期123456789CST Information Course 2006 2.3 Activity生命周期 ??全生命周期 –全生命周期是从Activity建立到销毁的全部过程始于onCreate结束于onDestroy ??使用者通常在onCreate中初始化Activity所能使用的全局资源和状态并在onDestroy中释放这些资源 ??在一些极端的情况下
Android系统会不调用onDestroy函数而直接终止进程 onCreateonDestroyonStartonStoponResumeonPauseonRestoreInstanceStateonSaveInstanceStateonRestart活动生命周期可视生命周期全生命周期123456789CST Information Course 2006 2.3 Activity生命周期 ??可视生命周期 –可视生命周期是Activity在界面上从可见到不可见的过程开始于onStart结束于onStop onCreateonDestroyonStartonStoponResumeonPauseonRestoreInstanceStateonSaveInstanceStateonRestart活动生命周期可视生命周期全生命周期123456789CST Information Course 2006 2.3 Activity生命周期 ??可视生命周期 ??onStart一般用来初始化或启动与更新界面相关的资源 ??onStop一般用来暂停或停止一切与更新用户界面相关的线程、计时器和服务 ??onRestart函数在onSart前被调用用来在Activity从不可见变为可见的过程中进行一些特定的处理过程 ??onStart和onStop会被多次调用 ??onStart和onStop也经常被用来注册和注销BroadcastReceiver CST Information Course 2006 2.3 Activity生命周期 ??活动生命周期 –活动生命周期是Activity在屏幕的最上层并能够与用户交互的阶段开始于onResume结束于onPause –在Activity的状态变换过程中onResume和onPause经常被调用因此这两个函数中应使用更为简单、高效的代码 CST Information Course 2006 2.3 Activity生命周期 ??活动生命周期 ??onPause是第一个被标识为“可终止”的函数 ??在onPause返回后onStop和onDestroy随时能被
Android系统终止 ??onPause常用来保存持久数据如界面上的用户的输入信息等 onCreateonDestroyonStartonStoponResumeonPauseonRestoreInstanceStateonSaveInstanceStateonRestart活动生命周期可视生命周期全生命周期123456789CST Information Course 2006 2.3 Activity生命周期 ??onPause和onSaveInstanceState的区别 这两个函数都可以用来保存界面的用户输入数据他们的区别在于 –onPause一般用于保存持久性数据并将数据保存在存储设备上的文件系统或数据库系统中的 –onSaveInstanceState主要用来保存动态的状态信息信息一般保存在Bundle中 ??Bundle是能够保存多种格式数据的对象 ??在onSaveInstanceState保存在Bundle中的数据系统在调用onRestoreInstanceState和onCreate时会同样利用Bundle将数据传递给函数 CST Information Course 2006 2.3 Activity生命周期 ??举例建立一个新的
Android工程 –工程名称ActivityLifeCycle –包名称edu.hrbeu.ActivityLifeCycle –Activity名称ActivityLifeCycle CST Information Course 2006 2.3 Activity生命周期 ??ActivityLifeCycle.java文件的代码 1.package edu.hrbeu.ActivityLifeCycle 2. 3.import
android.app.Activity 4.import
android.os.Bundle 5.import
android.util.Log 6. 7.public class ActivityLifeCycle extends Activity 8. private static String TAG LIFTCYCLE 9. Override //完全生命周期开始时被调用初始化Activity 10. public void onCreateBundle savedInstanceState 11. super.onCreatesavedInstanceState 12. setContentViewR.layout.main 13. Log.iTAG 1 onCreate 14. 15. 16. Override //可视生命周期开始时被调用对用户界面进行必要的更改 17. public void onStart 18. super.onStart 19. Log.iTAG 2 onStart CST Information Course 2006 2.3 Activity生命周期 ??ActivityLifeCycle.java文件的代码 20. 21. 22. Override //在onStart后被调用用于恢复onSaveInstanceState保存的用户界面信息 23. public void onRestoreInstanceStateBundle savedInstanceState 24. super.onRestoreInstanceStatesavedInstanceState 25. Log.iTAG 3 onRestoreInstanceState 26. 27. 28. Override //在活动生命周期开始时被调用恢复被onPause停止的用于界面更新的资源 29. public void onResume 30. super.onResume 31. Log.iTAG 4 onResume 32. 33. 34. Override // 在onResume后被调用保存界面信息 35. public void onSaveInstanceStateBundle savedInstanceState CST Information Course 2006 2.3 Activity生命周期 ??ActivityLifeCycle.java文件的代码 36. super.onSaveInstanceStatesavedInstanceState 37. Log.iTAG 5 onSaveInstanceState 38. 39. 40. Override //在重新进入可视生命周期前被调用载入界面所需要的更改信息 41. public void onRestart 42. super.onRestart 43. Log.iTAG 6 onRestart 44. 45. 46. Override //在活动生命周期结束时被调用用来保存持久的数据或释放占用的资源 47. public void onPause 48. super.onPause 49. Log.iTAG “7 onPause”、 50. 51. 52.Override //在可视生命周期结束时被调用一般用来保存持久的数据或释放占用的资源 CST Information Course 2006 2.3 Activity生命周期 ??ActivityLifeCycle.java文件的代码 ??上面的程序主要通过在生命周期函数中添加“日志点”的方法进行调试程序的运行结果将会显示在LogCat中 ??为了显示结果易于观察和分析在LogCat设53.public void onStop 54. super.onStop 55. Log.iTAG 8 onStop 56. 57. 58. Override //在完全生命周期结束时被调用释放资源包括线程、数据连接等 59. public void onDestroy 60. super.onDestroy 61. Log.iTAG 9 onDestroy 62. 63. CST Information Course 2006 2.3 Activity生命周期 ??全生命周期 –启动和关闭ActivityLifeCycle 的LogCat输出 ??启动ActivityLifeCycle ??按下模拟器的“返回键” ??关闭ActivityLifeCycle –LogCat输出结果 CST Information Course 2006 2.3 Activity生命周期 ??全生命周期 –函数的调用顺序onCreate → onStart→ onResume → onPause→ onStop→ onDestroy ??调用onCreate函数分配资源 ??调用onStart将Activity显示在屏幕上 ??调用onResume获取屏幕焦点 ??调用onPause、onStop和onDestroy释放资源并销毁进程 CST Information Course 2006 2.3 Activity生命周期 ??可视生命周期 –状态转换 ??启动ActivityLifeCycle ??按“呼出/接听键”启动内置的拨号程序 ??再通过“返回键”退出拨号程序 ??ActivityLifeCycle重新显示在屏幕中 –可视生命周期的LogCat输出结果 CST Information Course 2006 2.3 Activity生命周期 ??可视生命周期 –函数的调用顺序 onSaveInstanceState → onPause→ onStop → onRestart→ onStart→ onResume ??调用onSaveInstanceState函数保存Activity状态 ??调用onPause和onStop停止对不可见Activity的更新 ??调用onRestart恢复需要界面上需要更新的信息 ??调用onStart和onResume重新显示Activity并接受用户交互 CST Information Course 2006 2.3 Activity生命周期 ??可视生命周期 –开启IDA的可视生命周期Dev Tools → Development Settings → Immediately destroy activities IDA下开启IDA CST Information Course 2006 2.3 Activity生命周期 ??可视生命周期 –开启IDA的可视生命周期的函数调用顺序onSaveInstanceState→ onPause→ onStop→ onDestroy→ onCreate→ onStart→ onRestoreInstanceState→ onResume ??调用onRestoreInstanceState恢复Activity销毁前的状态 ??其他的函数调用顺序与程序启动过程的调用顺序相同 CST Information Course 2006 2.3 Activity生命周期 ??活动生命周期 –活动生命周期的LogCat输出 ??启动ActivityLifeCycle ??通过“挂断键”使模拟器进入休眠状态 ??再通过“挂断键”唤醒模拟器 –LogCat的输出结果 CST Information Course 2006 2.3 Activity生命周期 ??活动生命周期 –函数调用顺序如下onSaveInstanceState → onPause → onResume ??调用onSaveInstanceState 保存Activity的状态 ??调用onPause停止与用户交互 ??调用onResume恢复与用户的交互 CST Information Course 2006 2.4 程序调试
Android系统提供了两种调试工具LogCat和DevTools用于定位、分析及修复程序中出现的错误 ??2.4.1 LogCat –LogCat是用来获取系统日志信息的工具并可以显示在Eclipse集成开发环境中 –功能能够捕获的信息包括Dalvik虚拟机产生的信息、进程信息、ActivityManager信息、PackagerManager信息、Homeloader 信息、WindowsManager信息、
Android运行时信息和应用程序信息等 CST Information Course 2006 2.4 程序调试 ??2.4.1 LogCat –打开方式Window → Show View → Other 打开Show View的选择菜单然后在Andoird → LogCat中选择LogCat CST Information Course 2006 2.4 程序调试 ??2.4.1 LogCat –LogCat打开后便显示在Eclipse的下方区域 CST Information Course 2006 2.4 程序调试 ??2.4.1 LogCat –LogCat的右上方的五个字母表示五种不同类型的日志信息 他们的级别依次增高 V详细Verbose信息 D调试Debug信息 I通告Info信息 W:警告Warn信息 E :错误Error信息 CST Information Course 2006 2.4 程序调试 ??2.4.1 LogCat –在LogCat中用户可以通过五个字母图标选择显示的信息类型级别高于所选类型的信息也会在LogCat中显示但级别低于所选类型的信息则不会被显示 CST Information Course 2006 2.4 程序调试 2.4.1 LogCat –LogCat提供了“过滤”功能在右上角的“”号和“-”号分别是添加和删除过滤器。
用户可以根据日志信息的标签Tag、产生日志的进程编号Pid或信息等级Level对显示的日志内容进行过滤 CST Information Course 2006 2.4 程序调试 2.4.1 LogCat –程序调试原理 ??引入
android.util.Log包 ??使用Log.v、 Log.d、 Log.i 、Log.w 和 Log.e五个函数在程序中设置“日志点” ??当程序运行到“日志点”时应用程序的日志信息便被发送到LogCat中 ??判断“日志点”信息与预期的内容是否一致 ??进而判断程序是否存在错误 – Log.v用来记录详细信息Log.d用来记录调试信息Log.i用来记录通告信息CST Information Course 2006 2.4 程序调试 2.4.1 LogCat –演示了Log类的具体使用方法 1.package edu.hrbeu.LogCat 2. 3.import
android.app.Activity 4.import
android.os.Bundle 5.import
android.util.Log 6. 7.public class LogCat extends Activity 8. final static String TAG LOGCAT 9. Override 10. public void onCreateBundle savedInstanceState 11. super.onCreatesavedInstanceState 12. setContentViewR.layout.main 13.