美文网首页
报错:System services not available

报错:System services not available

作者: tjoven | 来源:发表于2019-02-14 16:03 被阅读0次

    问题描述:

    首页跳到listView列表页 报错:System services not available to Activities before onCreate()

    问题代码:

    adapter初始话的时候,使用了context上下文。如图:


    bb.png

    但是 在activity中,adapter是在oncreate之前,在声明全局变量的时候直接初始化的,这个时候context还是null,所以报错。代码图如下图:


    aa.png

    最终定位到,代码报错的位置


    image.png

    分析原因

    android采用的是java语言,但是和普通的java程序不同,并不是随便创建一个类,写一个main方法就能运行。android程序的运行需要上下文的环境context,activity是一个java类,但他不是一个普通的java类,他是android的四大组件之一。普通的java类是通过关键字new 的方式进行初始化,activity必须通过context.startActivity()。
    根据上面报错的位置,原因是mBase 为null


    image.png

    那么,mBase 在哪里进行赋值的呢?


    image.png

    activity继承ContextThemeWrapper,ContextThemeWrapper继承ContextWrapper。在activity的关键方法attach()中发现了attachBaseContext()


    image.png

    第二步,继续向上查找,哪里调用了activity的attach。我们都是到activity启动的入口是activityThread类的performLaunchActivity()方法,在此方法中找到


    image.png

    箭头1:创建activity实例,
    箭头2:把上下文context attach到activity,
    到此,找到了报错的最终原因。activity实例化的时候,先adapter初始化,但此时context还没有attach到activity。

    相关文章

      网友评论

          本文标题:报错:System services not available

          本文链接:https://www.haomeiwen.com/subject/tobeeqtx.html