上一篇文章中我们实现了对资源文件的替换,但是有一个问题,就是得创建一个resource对象并使用这个resource对象才能实现对资源的替换,很麻烦,需要每个类去重写getResource方法。通过阅读framework层源码发现ContextImpl类的构造方法中实现了对resource的赋值操作。
private ContextImpl(ContextImpl container, ActivityThread mainThread,
LoadedApk packageInfo, IBinder activityToken, UserHandle user, int flags,
Display display, Configuration overrideConfiguration, int createDisplayWithId) {
mPackageInfo = packageInfo;
Resources resources = packageInfo.getResources(mainThread);
}
跟踪packageInfo的getResources方法。在LoadedApk 类中
public Resources getResources(ActivityThread mainThread) {
if (mResources == null) {
mResources = mainThread.getTopLevelResources(mResDir, mSplitResDirs, mOverlayDirs,
mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, this);
}
return mResources;
</