-
public final int addAssetPath(String path) {
-
int res = addAssetPathNative(path);
-
return res;
-
}
其次是要实现那两个抽象方法
[java] view plain copy
-
@Override
-
public AssetManager getAssets() {
-
return mAssetManager == null ? super.getAssets() : mAssetManager;
-
}
-
@Override
-
public Resources getResources() {
-
return mResources == null ? super.getResources() : mResources;
-
}
okay,问题搞定。这样一来,在apk中就可以通过R来访问资源了。
这是本文开头提到的另一个需要解决的难题。为什么会有这个问题,其实很好理解,apk被宿主程序调起以后,apk中的activity其实就是一个普通的对象,不具有activity的性质,因为系统启动activity是要做很多初始化工作的,而我们在应用层通过反射去启动activity是很难完成系统所做的初始化工作的,所以activity的大部分特性都无法使用包括activity的生命周期管理,这就需要我们自己去管理。谈到activity生命周期,其实就是那几个常见的方法:onCreate、onStart、onResume、onPause等,由于apk中的activity不是真正意义上的activity(没有在宿主程序中注册且没有完全初始化),所以这几个生命周期的方法系统就不会去自动调用了。针对此类问题,采用Fragment是一个不错的方法,Fragment从3.0引入,通过support-v4包,可以兼容3.0以下的android版本。Fragment既有类似于Activity的生命周期,又有类似于View的界面,将Fragment加入到Activity中,activity会自动管理Fra