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を提供しています。これにより、ライブラリプロジェクトの定数が初期化されます。
私のアプローチは、1つの特定のユースケースを除いて、うまく機能します。アプリがしばらく使用されておらず、OSによって「停止」されている場合、ConstantsHelperの静的フィールドは忘れられます。
定数は(上記のように)メインアクティビティによってリセットされることになっていますが、OSが別のアクティビティを再開するため、メインアクティビティは起動されません。この結果、定数の初期化が忘れられ、再開されたアクティビティがライブラリ(サブプロジェクトの知識がない)にあるため、定数を再初期化できません。
ライブラリ内の他のアクティビティに、再開時にサブプロジェクトからコードを呼び出すように「指示」するにはどうすればよいですか?または、サブプロジェクトの一部のコードが履歴書ごとに呼び出されるようにする方法はありますか?