Вот мое предложение. Не позволяйте ни одной деятельности сохранять ссылку на другую деятельность, это не лучшая практика.
Предложение
Если полученный вами обратный вызов оказывает влияние на несколько действий, сделайте его глобальным. Я обычно создаю класс синглтон-менеджера для обработки логики каждого глобального события, которая может влиять на многие места в приложении. В любом месте вашего приложения необходимо прослушать событие, зарегистрировать событие у менеджера.
Например, мой AppLocationManager
- это одноэлементный класс, отвечающий за обновление gps и другие данные о местоположении. При изменении местоположения запускаются события для всех зарегистрированных слушателей. В вашем случае и MainActivity, и SecondActivity знают об изменениях и сами обновляются, не забудьте отменить регистрацию слушателя в действии onDestroy, иначе у вас будет утечка памяти.
Обходной путь для быстрого внедрения
Если вы все еще хотите сохранить ссылку на действие для быстрой модификации, что не рекомендуется, используйте WeakReference
Сохранить WeakReference
из MySecondActivity
в качестве статической глобальной переменной:
public static WeakReference<Activity> mTmpAtivity
В отличие от значения по умолчанию StrongReference
, эта переменная будет освобождать экземпляр, если активность GC, поэтому она безопасна для памяти.