Android使用SharedPreferences实现记住我功能卡顿,如何优化提速?
优化方案
1. 调整跳转逻辑顺序,优先判断登录状态
你遇到的登录页闪烁问题核心原因是:判断自动登录的逻辑写在了登录页布局加载之后,页面已经开始渲染才执行跳转,所以会出现几百毫秒的可见时长。
把读取登录状态的逻辑前移到setContentView之前执行,确认需要自动跳转时直接跳转到主页、销毁登录页,完全不执行布局加载逻辑,就可以避免闪屏:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 优先判断登录状态,再加载布局 SharedPreferences preferences = getSharedPreferences("checkbox", MODE_PRIVATE); boolean isNeedAutoLogin = "true".equals(preferences.getString("remember", "false")); if (isNeedAutoLogin) { startActivity(new Intent(LoginActivity.this, HomeActivity.class)); finish(); // 直接终止后续逻辑,不加载登录页布局 return; } // 不需要自动跳转时,再加载登录页 setContentView(futuristicLoginLayoutBinding.getRoot()); // 其他登录页初始化逻辑 }
2. 优化SharedPreferences存储逻辑
- 你当前用String类型存储布尔状态,可以改为直接存取布尔值,减少类型转换开销:
// 保存状态时代码可简化为 SharedPreferences preferences = getSharedPreferences("checkbox", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); boolean isChecked = futuristicLoginLayoutBinding.checkboxLogin.isChecked(); editor.putBoolean("remember", isChecked); editor.apply(); Toast.makeText(context, isChecked ? "Girişi xatırla seçildi" : "Girişi xatırla seçilmədi", Toast.LENGTH_SHORT).show();
3. 可选优化:增加中转启动页
如果应用本身有启动初始化任务,可以新增一个无UI/仅展示品牌logo的闪屏页,所有启动逻辑(包括登录状态判断、必要资源初始化)都在闪屏页完成,用户只会看到闪屏页或直接进入主页,完全不会感知到登录页的存在。
内容的提问来源于stack exchange,提问作者natiq natiq
相关产品推荐
相关产品推荐

