1.Android中4大组件
Activity:用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。
BroadcastRecevier:广播接收者,运用在应用程序间传输信息,可以使广播接收器来应用对一个外部事件做出响应
ContentProvider:内容提供者,使一个应用程序的指定数据集提供给其他应用程序
Service:服务,运行在手机后台,适合执行不需要和用户交互且需长期运行的任务
2.Activity之间的通信方式
通过Intent方式传递参数跳转
广播方式
借助类的静态变量或全局变量
借助SharedPreference或是外部存储,如数据库或本地文件
3.Activity四种状态
running
paused
stopped
killed
4.Activity生命周期
onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问
onStart():activity在屏幕上对用户可见时调用
onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用)
onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态
onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用
onDestroy():activity被完全从系统内存中移除时调用
onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动
5.Activity启动过程
(1)在安装应用时,系统会启动PackaManagerService管理服务,这个管理服务会对AndroidManifest进行解析,从而得到应用程序中的相关信息,比如service,activity,Broadcast等等,然后获得相关组件的信息。
(2)当用户点击应用图标时,就会调用startActivitySately(),而这个方法内部则是调用startActivity(),startActivity()最终还是会调用startActivityForResult().由于startActivityForResult()是有返回结果的,系统直接返回-1,表示不需要返回结果。
(3)startActivityForResult()通过instrumentation类中的execStartActivity()来启动activity,instrumentation这个类主要作用是监控程序和系统之间的交互。在这个execStartActivity()中会获取ActivityManagerService的代理对象,通过这个代理对象进行启动activity
(4)在ActivityManagerService的代理对象中,通过Binder通信,调用到ApplicationThread.scheduleLaunchActivity()进行启动activity,在这个方法中创建一个ActivityClientRecord对象,用来记录启动Activity组件的信息,然后通过handler将ActivityClientRecord发送出去
(5)在handler收到消息后,调用ActivityThread.handleLaunchActivity()启动Activity
6.Activity切换横屏时生命周期
onSaveInstanceState()
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState()
onResume()
7.Activity启动模式
standard:默认的启动模式,每次启动会在任务栈中新建一个启动的activity的实例
singletop:如果要启动的Activity实例已经位于栈顶,则不会重新创建该Activity的实例,否则会产生一个新的运行实例
singletask:如果栈中有该Activity实例,则直接启动,中间的Activity实例将会被关闭,关闭的顺序与启动的顺序相同
singleinstance:该启动模式会在启动一个Activity时,启动一个新的任务栈,将该Activity实例放置在这个任务栈,并且该任务栈中不会再保存其他的Activity实例
网友评论