В моем приложении для Android, когда пользователь пытается перейти от одного действия к другому, может быть какое-то глобальное состояние, которое указывает, что ему нужно сначала выполнить какое-то другое действие.
Чтобы выполнить это, янаписал класс со следующим кодом:
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) пинг сервера, указывающий, что текущая версия приложения устарела 2) любаяRPC сервера, указывающий, что учетные данные пользователя больше не действительны.Я не хочу добавить логику к каждому действию, чтобы обрабатывать их проверку и возобновлять обычную работу после их завершения.Это нарушение СУХОГО и подвержено ошибкам в командной среде.