自从 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 中的静态字段会被遗忘。
常量应该由主要活动重置(如上所示),但主要活动甚至没有启动,因为操作系统恢复了不同的活动。这样做的结果是常量的初始化被忘记了,我无法重新初始化它们,因为恢复的活动在库中(它不知道子项目)。
如何“告诉”库中的其他活动在恢复时从子项目中调用代码?或者,有没有办法确保我的子项目中的某些代码在每份简历上都被调用?