报错:System services not available

2019-02-14  本文已影响0人  tjoven

问题描述:

首页跳到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。

上一篇下一篇

猜你喜欢

热点阅读