and-load-aot
在打开页面之前,提前去调用加载数据的方法(可能是网络数据或者数据库),这样页面打开以后数据可能已经准备好了,就可以马上展示给用户。页面的初始化一般比较耗时,这样可以节省掉初始化的时间,并行的去初始化页面和加载数据,缩短页面展示给用户的总时间。
解决思路举一个例子:例如在打开A页面Activity时,在调用startActivity方法的时候,就去调用A页面的加载数据方法loadData(),此时开始加载网络数据,同时Acitivity开始初始化加载布局等,等Activity准备好UI需要数据的时候去检查loadData()是否加载完毕,如果完毕了就直接显示数据,如果没有完成就弹出loading开始等待它执行完成。
About
Activity/Fragment/View的初始化一般都会消耗一些时间,例如:
- 在打开页面Activity时,一般的流程是这样的:
- 1、通知AMS进程去创建新的Activity
- 2、AMS检查Activity进程是否存在,不存在先创建进程,已经存在就通知该进程创建Activity实例
- 3、Activity创建完后加载布局View
- 4、然后去网络中或者数据库中异步请求数据
- 5、数据准备好后通知渲染到View上
上面的流程一般是串行的,即要等到Activity准备好后再去请求数据,而准备Activity的过程往往是耗时的过程(例如启动Activity涉及到跨进程、遍历创建View树都是耗时的过程),为什么不把这个过程改为并行的呢?甚至改为提前进行呢?
怎样优雅地把创建页面和请求数据并行进