如何使用SharedPreferences保存应用最后操作的Activity并实现重启跳转
实现Java中保存最后操作Activity的方法
核心思路
利用SharedPreferences存储用户最后操作的Activity类名,在启动页(1.java)启动时读取该值,自动跳转到对应的Activity。
步骤1:在每个Activity中保存当前类名
在1.java、2.java、3.java的onDestroy()方法中添加保存逻辑,确保用户退出时记录最后停留的页面:
@Override protected void onDestroy() { super.onDestroy(); // 获取SharedPreferences实例,"LastActivity"为存储文件的名称 SharedPreferences sp = getSharedPreferences("LastActivity", MODE_PRIVATE); // 存入当前Activity的完整类名 sp.edit().putString("last_activity", getClass().getName()).apply(); }
步骤2:在启动页(1.java)中实现自动跳转
在1.java的onCreate()方法里读取存储的类名,判断并跳转到最后操作的页面:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_1); SharedPreferences sp = getSharedPreferences("LastActivity", MODE_PRIVATE); String lastActivityName = sp.getString("last_activity", null); // 如果存在保存的类名,且不是当前启动页,执行跳转 if (lastActivityName != null && !lastActivityName.equals(getClass().getName())) { try { // 通过反射获取目标Activity的Class对象 Class<?> targetActivity = Class.forName(lastActivityName); Intent intent = new Intent(this, targetActivity); startActivity(intent); // 跳转完成后关闭启动页 finish(); } catch (ClassNotFoundException e) { // 若类不存在(比如代码修改后类名变更),则留在启动页 e.printStackTrace(); } } }
注意事项
MODE_PRIVATE表示该SharedPreferences仅当前应用可访问,保证数据安全。- 使用
apply()提交修改而非commit(),apply()是异步操作,不会阻塞主线程,更适合这种场景。 - 如果用户在启动页(1.java)直接退出,下次打开仍会进入1.java,符合预期。
内容的提问来源于stack exchange,提问作者JeanIvanyu
相关产品推荐
相关产品推荐

