回过头来从最基础的开始,先写知识点,后填入具体内容。由于写博文主旨为当前面试服务,所以会先把架子搭起来再慢慢编辑填充,当前编辑次数:1。
Acitvity:
Android系统使用activity stack对activity做管理,通常一个应用的activity都在一个stack里面。
模式:所谓模式,就是启动一个activity的时候,对这个stack要做什么处理。
standhard模式。不检查stack,直接创建一个新的activity放入栈顶。
singleTop模式。先检查栈顶的activity是不是要启动的activity,如果是则什么都不做;否则会创建一个新的activity放入栈顶。
singleTask模式。先检查本应用的整个stack内有没有这个activity,如果有则从栈内调到栈顶来,如果没有就创建一个新的activity放入栈顶。
singleInstance模式。启动一个新的stack来管理这个activity。主要用于与其他应用共享这个活动实例,比如来电显示界面。
生命周期:onCreate->onStart->onResume ->onPause->onStop->onDestory 此外onStop之后重新调用Activity会调用onRestart方法。
拓展:当点击一个没有运行的app的桌面图标的时候
Launcher应用响应onClick()调用startActivitySafely ()开始activity的创建,然后到launcher的父类Activity中执行startActivity(),里面的动作实际是由Instrumentation的execStartActivity()来完成的。这个Instrumentation通过Binder获取了AMS的引用,将工作移入AMS中。AMS会先暂停,让PMS分析intent并从注册表文件中获取对应activity的信息,然后根据activity的模式对activity stack进行处理。一系列处理完毕后通过binder切回主线程ActivityThread的内部类ApplicationThread中了,在里面执行scheduleLaunchActivity()发送消息给H这个handler去处理,进一步的调用了ActivityThread的performLaunchActivity完成最终创建:包括从ActivityClientRecord中获取activity组件信息;通过Instrumentation用类加载器创建activity对象;通过LoadedApk尝试创建Application对象;创建ContextImpl对象并通过Activity的attach()完成一些重要数据的初始化;最后onCreate()。
----------------------------------------------------------------------------------------
这个流程各种网站各种书里都有详细的描述,我觉得简单一点回答就回答红字就行,想把关键点说明就上文就行,当然还有更深入更细致的细节,比如,但是作为应用层的开发人员而言我觉得上文就足够了。
----------------------------------------------------------------------------------------
对于application的角色我们还能再继续扩展:AMS获取activity信息时发现这个应用没有启动,会通知Zygote进程孵化出应用进程,然后在这个dalvik应用进程里执行ActivityThread的main方法。应用进程接下来通知AMS应用进程已启动,AMS保存应用进程的一个代理对象(applicationthread),这也是后面AMS做完工作后为什么能切回主线程ActivityThread的内部类ApplicationThread中的原因。
上面Zygote是一个很重要的东西,深挖可以挖到android开机后的一些操作,同样ActivityThread的main方法也很有意思,以后详细介绍。
状态:
运行状态,栈顶的activity就是运行状态,能与用户直接交互。
暂停状态,执行onPause之后的activity处于暂停状态,可见但不处于栈顶,即用户无法直接与这个activity交互。比如启动了一个非全屏系统弹框后的activity。.
停止状态,执行onStop之后,活动完全不可见。系统会为此状态活动保留相应状态和成员变量,但是其他地方需要内存时可能被回收。反过来说onStart可以对活动状态和UI状态做初始化或者复原。万一这种状态的活动被系统回收了,再启用的之后会重新调用oncreate方法,可以在onSaveInstanceState()方法中使用Bundle类型参数对临时变量做保存。
销毁状态,onDestory之后就被销毁了,活动被从栈中移除,系统最可能回收。
启动过程:
其他接口:
onNewIntent()接口,为intent跳转至复用的activity时执行的方法,需要使用setIntent()来更新intent防止获取的数据是第一次intent里面的。
Service:
启动方式
生命周期
与线程区别
与Activity的交互
BroadcastReceiver:
特殊模式
注意事项
Fragment:
生命周期