Android weakreference vs eventbus可避免内存泄漏?

Android weakreference vs eventbus可避免内存泄漏?,android,design-patterns,memory-leaks,callback,heap-memory,Android,Design Patterns,Memory Leaks,Callback,Heap Memory,我正在开发一个应用程序,其中我正在使用翻新库来调用web服务。在调用web服务回调返回响应之后,我将把响应传递给下一个活动。我想知道最好的方法 我是新的记忆相关问题,如果我完全错了,请纠正我 我是否应该创建一个新类,然后向该类传递一个弱引用,并在主活动上从该类调用函数 或 我将在事件总线上注册一个新事件,当回调返回对象时,触发事件并调用函数 请考虑什么是避免内存泄漏的好方法。 在弱引用中保存回调/侦听器不是一个好主意。看 您可以使用事件总线在完成时“广播”异步操作的结果(在您的案例中是网

我正在开发一个应用程序,其中我正在使用翻新库来调用web服务。在调用web服务回调返回响应之后,我将把响应传递给下一个活动。我想知道最好的方法

我是新的记忆相关问题,如果我完全错了,请纠正我

我是否应该创建一个新类,然后向该类传递一个弱引用,并在主活动上从该类调用函数

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


请考虑什么是避免内存泄漏的好方法。

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

您可以使用事件总线在完成时“广播”异步操作的结果(在您的案例中是网络调用),并让其他对象(视图、片段、活动)注册到事件总线。注意事项:

  • 侦听器必须始终正确地取消注册,否则将导致内存泄漏
  • 您需要为每个事件类型创建一个新类。这个数字很快就会增加
  • 继承和事件总线不能很好地发挥作用。不可能对监听方法进行适当的“覆盖”
  • 也许其他对象也请求相同的数据。由于EventBus向所有人广播,监听器可能会在意想不到的时间获得多个相同类型的事件
  • 如果您以异步方式执行请求,则特定于改装用途:

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

    如果同时对weakReference进行垃圾收集,是否可以接受?执行前?如果用户在同一屏幕上,则当回调发生时,我将获取响应并将用户带到下一屏幕。您好,我喜欢这个答案。是否有其他方法来消除内存泄漏。@Nitin最好的方法是
    不导致
    内存泄漏。如果您养成了这样的好习惯,即在不再有用时取消注册回调和侦听器,在不需要时跟踪和取消请求,那么您将是安全的。
    repos.cancel();