保持伴随对象中活动的引用

时间:2018-05-15 14:48:07

标签: android kotlin

我有2个活动:MainActivity和MySecondActivity。 我启动MySecondActivity,但是当我在其中工作时,我收到来自MainActivity中外部库的回调。此回调应更新MySecondActivity中的一些信息。

问题:我可以在MainActivity中保留MySecondActivity的引用,以便稍后更新吗?

基本上就是这样:

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

(...)

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

我试图将mySecondIntent的引用存储在随播对象中,但我无法使其工作。

你有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是我的建议。不要让任何活动保留其他活动参考,这不是最佳做法。

<强>建议

如果您收到的回调对多项活动产生影响,请将其设为全局。我通常会创建一个单例管理器类来处理可能对应用程序中的许多位置产生影响的每个全局事件的逻辑。应用程序中的任何位置都需要监听事件,并将事件注册到管理员。

例如,我的AppLocationManager是一个单例类,负责制作gps刷新和其他位置内容。当位置改变时,向所有已注册的听众发射事件。在您的情况下,MainActivity和SecondActivity都知道更改并自行更新,请记住在活动onDestroy中取消注册侦听器,否则您将发生内存泄漏。

快速实施的解决方法

如果您仍想保留活动参考以进行快速修改(不推荐使用),请使用WeakReference

WeakReference MySecondActivity存储为静态全局变量:

public static WeakReference<Activity> mTmpAtivity

与默认StrongReference不同,如果活动是GC,则此变量将释放实例,因此它的内存安全。