Application的OnCreate一定会走吗?

Android中的app在AndroidManifest.xml中可以指定进程类,例如:

 <application android:name="PhoneApp"
                 android:persistent="true"
                 android:label="@string/phoneAppLabel"
                 android:icon="@mipmap/ic_launcher_phone"
                 android:allowBackup="false"
                 android:supportsRtl="true"
                 android:usesCleartextTraffic="true">
指定了PhoneApp类,PhoneApp类必然是要继承Application类的:

public class PhoneApp extends Application {
Application类中可以重写OnCreate方法

    @Override
    public void onCreate() {
一般在这个函数中可以做一些拥有进程生命周期数据结构的初始化工作,例如查询归属地的结构初始化,这样之后查询归属地直接调用接口即可,不用在每个调用的地方都要考虑初始化的问题。但是最近遇到了问题,本来应该在OnCreate中初始化的数据结构居然是null,百思不得姐呀。

不过在Android源码注释中很明白了:

 /**
     * Called when the application is starting, before any activity, service,
     * or receiver objects (excluding content providers) have been created.
     * Implementations should be as quick as possible (for example using 
     * lazy initialization of state) since the time spent in this function
     * directly impacts the performance of starting the first activity,
     * service, or receiver in a process.
     * If you override this method, be sure to call super.onCreate().
     */
    @CallSuper
    public void onCreate() {
    }
Application的OnCreate方法在任意activity、service或者receiver创建的时候必然会被调用(content provider除外!content provider除外!!content provider除外!!!)

出问题的就是一个ContentProvider中的代码

2017.10.20更正

onCreate是一定会走的不过时机对ContentProvider来说有点特别。参见

http://weishu.me/2016/07/12/understand-plugin-framework-content-provider/

仔细观察以上代码,你会发现:ContentProvider的安装比Application的onCreate回调还要早!!因此,分析到这里我们已经明白了前面提出的那个问题,进程启动之后会在Applition类的onCreate 回调之前,在Application对象创建之后完成ContentProvider的安装。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值