知识点一、
Application和四大组件启动时的方法顺序和相关注意事项:
1. 调用流程为: Application 的 attachBaseContext ---> ContentProvider 的 onCreate ----> Application 的 onCreate ---> Activity、Service 等的 onCreate(Activity 和 Service 不分先后);
问题一:ContentProvider 的 onCreate 一定是优先于 Application 的 onCreate 执行的吗?
结论:确实是在 ContentProvider 的 onCreate 执行完成之后,才会执行 Application 的 onCreate 的。
问题二:ContentProvider中 的 call方法 是在 Application 的 onCreate 执行完之后才执行的吗?
结论:Application 的 onCreate方法 和 Provider 的 call方法 不是顺序执行,而是会同时执行。
问题三:有比 Application 的 attachBaseContext方法 更早执行的方法吗?
结论:Application 的构造方法早于 Application 的 attachBaseContext方法 调用。
那么有没有比 Application 的构造方法还早被调用的方法呢?有,自己可以再想想哦。
“坑”一:在 attachBaseContext方法 中使用 getApplicationContext方法 返回null;
解决方法:如果在 attachBaseContext方法 中要使用 context 的话,那么使用 this 吧;
“坑”二:在 Application 的 attachBaseContext方法 中,去调用自身的 ContentProvider,那么这个 ContentProvider 会被初始化两次,也就是说这个 ContentProvider 会被两次调用到onCreate。如果你在 ContentProvider 的 onCreate 中有一些逻辑,那么一定要检查是否会有影响。
知识点二、
NIO(non-blocking IO 非阻塞线程的IO)
Channel : 可以和原来的Stream类比, 但是有个关键区别, 那就是通过Channel 读写数据,是非阻塞的, 一个socket 也是Channel 的一种。
Buffer : 通过Channel 读写的数据都在Buffer 中, 由于Buffer 不是流, 你读到Buffer 尾部以后还可以从头再读。
Selector : 和Channel配合使用, Channel 可以把自己注册到Selector当中, 告诉Selector 说, 我要监听XXX事件, 这是一个线程管理多个Channel的关键。
Android studio如何恢复误删的文件或者文件夹?
错误:当你一不小心或者脑抽删除(delete)了一个文件,或者更脑抽的delete你的module之后?
解决:1、在你项目的最上层project目录点击右键;
2、选项里面有一个Local History选择show history
3、选择你想恢复的,如果找不到,可以通过右上角搜索,找到之后,点击左上角的revert恢复就哦了!!!