步骤:
putExtra()
方法添加参数。getIntent().getXXXExtra()
获取参数。示例代码:
// 源Activity Intent intent = new Intent(SourceActivity.this, TargetActivity.class); intent.putExtra("key_name", "value"); // 字符串 intent.putExtra("key_age", 25); // 整数 startActivity(intent); // 目标Activity String name = getIntent().getStringExtra("key_name"); int age = getIntent().getIntExtra("key_age", 0); // 默认值为0
步骤:
Serializable
或Parcelable
接口。putExtra()
传递对象,目标Activity中强制类型转换。示例代码:
// 自定义对象(实现Serializable) public class User implements Serializable { String name; int age; // 构造方法、getter/setter省略 } // 源Activity User user = new User("Alice", 20); Intent intent = new Intent(SourceActivity.this, TargetActivity.class); intent.putExtra("key_user", user); startActivity(intent); // 目标Activity User receivedUser = (User) getIntent().getSerializableExtra("key_user");
步骤:
示例代码:
// 全局类 public class GlobalData { public static String sharedData; } // 源Activity GlobalData.sharedData = "Hello from Source"; // 目标Activity String data = GlobalData.sharedData;
步骤:
示例代码:
// 单例类 public class DataHolder { private static DataHolder instance = new DataHolder(); private String data; private DataHolder() {} public static DataHolder getInstance() { return instance; } public void setData(String data) { this.data = data; } public String getData() { return data; } } // 源Activity DataHolder.getInstance().setData("Singleton Data"); // 目标Activity String data = DataHolder.getInstance().getData();
步骤:
SharedPreferences
保存数据。示例代码:
// 源Activity SharedPreferences sp = getSharedPreferences("my_prefs", MODE_PRIVATE); sp.edit().putString("key_city", "Beijing").apply(); // 目标Activity SharedPreferences sp = getSharedPreferences("my_prefs", MODE_PRIVATE); String city = sp.getString("key_city", "default_city");
步骤:
示例代码:
// 源Activity try { FileOutputStream fos = openFileOutput("data.txt", Context.MODE_PRIVATE); fos.write("Hello File".getBytes()); fos.close(); } catch (IOException e) { e.printStackTrace(); } // 目标Activity try { FileInputStream fis = openFileInput("data.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); String line = reader.readLine(); // 读取内容 reader.close(); } catch (IOException e) { e.printStackTrace(); }
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Intent传参 | 简单直接,支持多种数据类型 | 仅适用于Activity间单向传递 | 页面跳转时传递临时数据 |
全局变量(静态/单例) | 可跨组件共享数据 | 易导致内存泄漏,不适合大量数据 | 全局状态管理(如用户登录信息) |
SharedPreferences | 轻量级,数据持久化 | 仅适合简单键值对数据 | 配置信息、用户偏好设置 |
文件/数据库存储 | 支持复杂数据结构,持久化 | 读写开销较大 | 大量数据或需长期保存的数据 |
解答:
直接通过Intent传递大数据(如Bitmap)可能导致TransactionTooLargeException
,解决方案:
Parcelable
优化对象序列化。 ViewModel
(若使用Jetpack)在Activity间共享数据。解答:
是的,若全局变量持有Context
引用(如静态变量保存Activity实例),可能导致内存泄漏,解决方法:
Context
。 WeakReference
)或单例模式管理数据。 ViewModel
或LiveData
替代全局