私のAndroidアプリでは、ユーザーが1つのアクティビティから別のアクティビティに移行しようとすると、最初に他のアクションを完了する必要があることを示すグローバルな状態が発生する場合があります。
これを実現するために、次のコードを使用してクラスを作成しました。
private static WeakReference<Activity> oldActivityReference;
private static Intent waitingIntent;
public static void pushActivity(Activity currentActivity, Intent newActivityIntent) {
Intent blockingIntent = ThisClass.getBlockingActivity();
if (blockingIntent != null) {
ThisClass.oldActivityReference = new WeakReference<Activity>(currentActivity);
ThisClass.waitingIntent = newActivityIntent;
currentActivity.startActivity(blockingIntent);
return;
}
currentActivity.startActivity(newActivityIntent);
}
ブロッキングアクティビティが終了すると、ThisClass.blockingActivityFinished()が呼び出されます。これにより、古いアクティビティへの弱参照がまだ存在するかどうかが確認され、存在する場合は、そのアクティビティから元のインテントが起動されます。そうでない場合は、アプリケーションのコンテキストから元のインテントを起動します。
私の質問は、
これは正気ですか?この手法で潜在的なメモリリークの問題はありますか?これを達成するためのより良い方法はありますか?
編集-明確にするために、中断をトリガーする可能性のあるイベントのタイプは、1)現在のアプリのバージョンが非推奨であることを示すサーバーping 2)ユーザーの資格情報が無効になったことを示すサーバーRPCです。これらのチェックを処理し、完了したら通常どおりビジネスを再開するために、すべてのアクティビティにロジックを追加したくありません。これはDRYの違反であり、チーム環境ではエラーが発生しやすくなります。