在另一个活动托管的片段之间传递数据的最佳做法

时间:2018-01-24 19:10:41

标签: android interface

将数据从Activity传递到片段的最佳方法是什么,但片段由另一个活动托管。

诠: 活动A托管片段A(活动A中的内容)< ==活动B

我已经实现了这一点,但显然,我的做法导致了一些内存泄漏。

一个示例是在活动关闭时刷新片段中包含的RecyclerView,但我不想将其放在onResume中。

活动中包含的界面(不是主机)

public class Activity extends AppCompatActivity{
    public static OnlistenClose delegate;
    public interface OnlistenClose {
        void refreshList();
    }
}

//实现接口的片段

public class FragmentB extends Fragment implements Activity.OnlistenClose{

       Activity.delegate = this;

       @Override
       public void refreshList(){
          //my code
       }
}

使用 square / leakcanary 表示存在泄漏。

2 个答案:

答案 0 :(得分:1)

  

将数据从Activity传递到片段的最佳方法是什么,但片段由另一个活动托管。

最终,您将数据从一个活动传递到另一个活动。如果数据永久存储在数据库或文件中,则接收活动应该在第一个数据更新后读取数据。

另一方面,如果您传递的数据只需要在内存中可用,那么您可以使用Intent传递数据。

如您所见,在另一个活动中保留对一个活动的引用会导致内存泄漏。您尝试使用的回调方法仅对拥有该片段的活动有效,而不适用于第二个活动。相反,您应该尊重活动生命周期并根据需要使用Intents进行通信。

答案 1 :(得分:0)

对于一般性问题甚至特定情况,没有“最佳实践”。

传递数据的标准方式:

  • Intents
  • Storage
    • 共享偏好设置
    • 内部存储
    • 外部存储
    • SQLite数据库
    • 网络连接
  • 静态类(无需链接)
  • Etc等

有很多方法可以完成任务,因为有一些方法可以在句子中描述该任务。

  • 我完成了我的工作。
  • 我完成了我的任务。
  • 它发布在Play商店。
  • 我已经完成了。
  • 我无事可做。