Сохранить ссылку на действие в объекте-компаньоне - PullRequest
0 голосов
/ 15 мая 2018

У меня есть 2 действия: MainActivity и MySecondActivity.Я запускаю MySecondActivity, но пока я в нем работаю, я получаю обратный вызов из внешней библиотеки в MainActivity.Этот обратный вызов должен обновить некоторую информацию в MySecondActivity.

Вопрос: Могу ли я сохранить ссылку на MySecondActivity в MainActivity, чтобы обновить ее позже?

В основном это будет выглядеть так:

val mySecondIntent = Intent(applicationContext, MySecondActivity::class.java)
startActivity(mySecondIntent)

(...)

fun MyCallBackFunction(newInfo: Integer)
mySecondIntent.updateMyInfo(newInfo) <-- here I cannot access "MySecondIntent"

Я пытался сохранить ссылку mySecondIntent в объекте-компаньоне, но я не смог заставить его работать.

У вас есть какие-либо предложения?

Спасибо!

1 Ответ

0 голосов
/ 15 мая 2018

Вот мое предложение. Не позволяйте ни одной деятельности сохранять ссылку на другую деятельность, это не лучшая практика.

Предложение

Если полученный вами обратный вызов оказывает влияние на несколько действий, сделайте его глобальным. Я обычно создаю класс синглтон-менеджера для обработки логики каждого глобального события, которая может влиять на многие места в приложении. В любом месте вашего приложения необходимо прослушать событие, зарегистрировать событие у менеджера.

Например, мой AppLocationManager - это одноэлементный класс, отвечающий за обновление gps и другие данные о местоположении. При изменении местоположения запускаются события для всех зарегистрированных слушателей. В вашем случае и MainActivity, и SecondActivity знают об изменениях и сами обновляются, не забудьте отменить регистрацию слушателя в действии onDestroy, иначе у вас будет утечка памяти.

Обходной путь для быстрого внедрения

Если вы все еще хотите сохранить ссылку на действие для быстрой модификации, что не рекомендуется, используйте WeakReference

Сохранить WeakReference из MySecondActivity в качестве статической глобальной переменной:

public static WeakReference<Activity> mTmpAtivity

В отличие от значения по умолчанию StrongReference, эта переменная будет освобождать экземпляр, если активность GC, поэтому она безопасна для памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...