自从Android引入了库项目以来,我一直在将我的应用程序转换为库,以便可以通过适当的调整来制作多个版本(例如,使用相同的自由和专业版本代码库,但改变了一些东西)。从Android库调用非库代码
我最初有麻烦让图书馆项目的代码访问我的子项目中的字段。换句话说,我的免费和专业版本每个都有一个包含少量常量的类,图书馆项目将用它来区分某些功能。
在子项目中,我扩展了库的主要活动并添加了一个静态初始化块,它使用反射更改库中字段的值。
public class MyMainActivityProVersion extends MyMainActivity {
public static final String TAG = Constants.APP_NAME + "/SubClass";
static {
try {
ConstantsHelper.setConstants(Constants.class);
} catch (Exception e) {
Log.d(TAG, "--- Constants not initialised! ---");
e.printStackTrace();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
在这段代码,ConstantsHelper是在图书馆,和我从我的子项目提供Constants.class。这会初始化库项目中的常量。
我的方法很好,除了一个特定的用例。当应用程序在一段时间内没有被使用并且被操作系统“停止”时,ConstantsHelper中的静态字段将被遗忘。
常数应该由主要活动重置(如上所示),但主要活动甚至没有启动,因为操作系统恢复了不同的活动。其结果是,常量的初始化被遗忘了,我不能重新初始化它们,因为恢复的活动在图书馆(它不知道子项目)。
我该如何'告诉'库中的其他活动来调用子项目中的代码来恢复?或者,是否有办法确保我的子项目中的某些代码在每个简历上都被调用?
我可能可以解释类加载器中发生的事情,但我还没有完全理解 - 您是指“图书馆中恢复的活动”是什么意思?它是'MyMainActivityProVersion',正确的,它在你的应用程序中。常数被遗忘是什么意思? –
MyMainActivity继续调用一些其他活动,在这种情况下它是ViewerActivity,它驻留在库项目中。如果用户在ViewerActivity上,然后按下“home”,应用程序最终会关闭,并且ConstantsHelper中的常量必须重新初始化。他们不重新初始化,因为当用户恢复应用程序时,恢复的活动是ViewerActivity,并且我上面的重要代码没有执行 – HXCaine
因此,常量值不仅仅是ProVersionActivity?你知道应用程序类吗?无论启动的“子活动”如何,它都会创建一次。 – thaussma