手机开机到点击应用程序缩略图标的流程
1、开机
2、BootLoader来加载操作系统,是通过C++来完成的
3、Linux系统
4、启动一个进程,用于管理手机页面
5、系统服务SystemService
WindowManagerService
ActivityManagerService ->通过launcher.java来执行相应的代码 ->打开应用、打开打开文件夹
CameraService……
一个程序运行起来是一个进程,那么一个桌面程序运行起来也是一个进程。而执行某一个具体的任务是由线程来操作的ActivityThread ->线程的入口点main函数->点击图标->启动ActivityThread ->将ActivityThread对象进行绑定 thread.attach(false,startSeq)
->创建仪表类对象 管理程序的生命周期 mInnstrumentation = new Instrumentation();
->创建上下文ContextImpl context = ContextImpl.createAppContext(this,getSystemContext(),mPackageInfo);
->创建应用程序 mInitialApplication = context.mPackageInfo.makeApplication(true,null);
app = mActivityThread.mInstrument.newApplication(cl,appClass,appContext);
->回调application的onCreate方法: instrumentation.callApplicationOnCreate(app);
当系统启动应用程序被创建的时候被调用,当调用onCreate方法,那么程序已经被创建了
在ActivityThread中启动activity的流程
handleLaunchActivity-> performLaunchActivity 这是Activity的创建最核心的部分
-> 创建activity的上下文createContextForActivity
->创建启动的页面activity = Instrumentation.newActivity(cl,component.getClassName)
->将界面和window等信息绑定activity.attach(appContext,getInstrumentation,window……)->调用onCreate方法布局activity界面 mInstrumentation.callActivityOnCreate(activity,r.state)
->activity.performCreate(icicle);
->onCreate(icicle)
在Activity的子类中,通过实现onCreate方法 来对界面内进行初始化(UI布局,逻辑初始化)
Context上下文解
Application、Activity、Service等都有Context
什么是Context
简单来说就是运行环境,提供了访问系统资源的方法,可以理解为一种连接设备与界面之间的桥梁。
比如我们想访问某项资源完成某个任务,那么就需要context访问系统资源。比如getSharedPreferences、openFileInput、deleteFile、getExternalFileDir(获取SDK对应的路径)、startActivity……
我们来看一下官方解释:Context本身是一个抽象类,是对一系列系统服务接口的封装,包括:内部资源、包、类加载、I/O操作、权限、主线程、IPC和组件启动等操作的管理。
Context的获取方式
context和getApplicationContext
大多数情况下两者可以通用。在涉及界面跳转的情况下尽量使用activity的context,其提供了默认的任务栈。而applicationContext没有提供任务栈。