gpt4 book ai didi

android - weakreference vs eventbus以避免内存泄漏android?

转载 作者:太空狗 更新时间:2023-10-29 16:13:38 27 4
gpt4 key购买 nike

我正在开发一个应用程序,我在其中使用改进库来调用 Web 服务。在调用网络服务回调返回 Response 之后,我将 Response 传递给下一个 Activity 。我想知道最好的方法。

我是内存相关问题的新手,如果我完全错了,请纠正我。

我应该创建一个新类,然后将弱引用传递给该类,并在主 Activity 上调用该类的函数吗?

或者

我将在事件总线上注册一个新事件,当回调返回对象时,触发事件并调用函数。

请考虑避免内存泄漏的好处。

最佳答案

在弱引用中保存回调/监听器不是一个好主意。见

您可以使用事件总线在完成时“广播”异步操作(在您的情况下为网络调用)的结果,并让其他对象( View 、 fragment 、 Activity )注册到事件总线。注意事项:

  1. 监听器必须始终正确注销,否则会导致内存泄漏。
  2. 您需要为每种事件类型创建一个新类。这个数字很快就会增长。
  3. 继承和事件总线表现不佳。没有适当的“覆盖”聆听方法。
  4. 也许其他一些对象也请求了相同的数据。由于 EventBus 向所有人广播,听众可能会在意想不到的时间收到多个相同类型的事件。

特别是 Retrofit 的使用,如果你异步请求:

GitHubService service = retrofit.create(GitHubService.class);

Call<List<Repo>> repos = service.listRepos("octocat");
repos.enqueue(myCallback)

然后,当组件的生命周期结束时,您必须记住取消组件已进行的所有调用。即 ActivityonDestroy()FragmentonDetach()onDetachFromWindow() View :

repos.cancel();

关于android - weakreference vs eventbus以避免内存泄漏android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36303189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com