适用场景:Activity之间、组件间(如Activity与Service)传递简单数据。
数据类型:基本类型、String、Parcelable对象、Serializable对象。
示例:
// 发送端 Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("key", "value"); // 传递String startActivity(intent); // 接收端 String value = getIntent().getStringExtra("key");
特点:
适用场景:Fragment与Activity之间、Fragment之间传递数据。
数据类型:类似Intent,支持基本类型、Parcelable/Serializable。
示例:
// 在Fragment中设置数据 Bundle bundle = new Bundle(); bundle.putString("key", "value"); fragment.setArguments(bundle); // 在目标Fragment中获取数据 String value = getArguments().getString("key");
特点:
setArguments()
传递,数据在配置变化(如旋转屏幕)时保留。适用场景:临时存储全局数据,跨组件共享。
数据类型:任意对象。
示例:
public class DataHolder { private static DataHolder instance = new DataHolder(); public String data; private DataHolder() {} public static DataHolder getInstance() { return instance; } } // 使用 DataHolder.getInstance().data = "value";
特点:
简单但易导致内存泄漏,需谨慎管理生命周期。
// SharedPreferences SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); sp.edit().putString("key", "value").apply(); // 存储 String value = sp.getString("key", ""); // 读取
数据持久化,应用关闭后仍存在。
适用场景:同一Activity内的Fragment间通信,避免直接依赖。
数据类型:任意对象(推荐符合Parcelable规范)。
示例:
// 定义ViewModel public class MyViewModel extends ViewModel { public MutableLiveData<String> data = new MutableLiveData<>(); } // FragmentA设置数据 ViewModel viewModel = new ViewModelProvider(requireActivity()).get(MyViewModel.class); viewModel.data.setValue("value"); // FragmentB观察数据 viewModel.data.observe(getViewLifecycleOwner(), value -> { // 处理value });
特点:
生命周期安全,数据在配置变化时自动保留。
适用场景:解耦组件间通信,如Activity与Fragment、后台线程与UI。
数据类型:任意对象(需实现PostThread
规范)。
示例:
// 发送事件 EventBus.getDefault().post(new MessageEvent("data")); // 接收事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { // 处理event.data }
特点:
greenrobot.eventbus
),适合复杂场景。方式 | 适用场景 | 数据类型限制 | 生命周期影响 | 性能开销 |
---|---|---|---|---|
Intent | Activity/组件间 | 小数据量、Parcelable | 无 | 低 |
Bundle | Fragment与Activity间 | 同Intent | 配置变化保留 | 低 |
全局变量 | 全局临时数据 | 无限制 | 易泄漏 | 中等 |
SharedPreferences | 持久化配置 | 键值对 | 持久化 | 低 |
ViewModel | 同一Activity内的Fragment通信 | 任意对象 | 生命周期安全 | 中等 |
EventBus | 解耦复杂组件通信 | 任意对象 | 无 | 较高 |
public class User implements Parcelable { String name; // 必须实现contentDescribe()和writeToParcel()方法 }
Intent intent = new Intent(); intent.putExtra("user", user); // user为Parcelable对象