【Android零碎笔记】

文章目录

  • [1. onSaveInstanceState()](#1. onSaveInstanceState())
  • [2. Fragment加入/不加入回退栈的区别](#2. Fragment加入/不加入回退栈的区别)
      • [1. 加入回退栈(addToBackStack)](#1. 加入回退栈(addToBackStack))
      • [2. 不加入回退栈(不调用 addToBackStack)](#2. 不加入回退栈(不调用 addToBackStack))
      • 总结

1. onSaveInstanceState()

onSaveInstanceState() 方法是在 Android Activity 的生命周期中,特定的时机被调用。具体来说,它是在以下情况下被调用的:

  1. 当 Activity 即将被暂停(onPause)时 :在某些情况下,例如屏幕旋转、切换到其他应用、按下 Home 键等,Activity 可能会被系统暂停。在此之前,系统会调用 onSaveInstanceState() 来保存当前的状态。

  2. 在 Activity 被销毁之前 :如果系统因为资源紧张而需要销毁一个不在前台的 Activity,onSaveInstanceState() 也会被调用,以便保存当前状态。

生命周期关系

onSaveInstanceState() 的调用通常在以下生命周期方法中间:

  • onPause() :Activity 正在从前台变为后台时。onPause() 之前会调用 onSaveInstanceState()。
  • onStop() :Activity 不再可见时。onStop() 之前也会调用 onSaveInstanceState()(如果 Activity 即将被停止并且需要保存状态)。

生命周期示例

以下是 Activity 生命周期的一个基本示意图,onSaveInstanceState() 的调用时机在其中得以体现:

复制代码
onCreate()
   |
onStart()
   |
onResume()
   |
(onPause())
  (onSaveInstanceState())  // 在 onPause() 之前调用
   |
(onStop())  
   |
(onDestroy())

总结

  • onSaveInstanceState() 主要在 onPause() 之前被调用,允许你保存当前的状态,以便在 Activity 重新创建时恢复这些状态。
  • 它不保证在每次 Activity 被关闭时都会被调用,主要用于临时状态保存。

2. Fragment加入/不加入回退栈的区别

在Android开发中,Fragment的回退栈是用于管理Fragment的历史记录的。当你使用FragmentTransaction来添加或替换Fragment时,可以选择是否将该操作加入回退栈。加入和不加入回退栈的主要区别在于Fragment的导航行为和用户体验。以下是这两种情况的详细说明:

1. 加入回退栈(addToBackStack)

  • 行为 :当你调用 addToBackStack() 方法后,当前的Fragment事务会被推入到回退栈中。当用户按下返回键时,系统会弹出回退栈中的上一个Fragment,展示该Fragment。

  • 适用场景:适合用于需要用户能够返回到上一个Fragment的场景。例如,在一个购物应用中,从商品列表Fragment跳转到商品详情Fragment,用户可能希望能够返回到商品列表。

  • 代码示例:

    java 复制代码
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, new MyFragment());
    transaction.addToBackStack(null); // 将此事务加入回退栈
    transaction.commit();
  • 用户体验:用户可以自然地使用返回键在Fragment之间导航,体验更为流畅。

2. 不加入回退栈(不调用 addToBackStack)

  • 行为 :如果不调用 addToBackStack(),则该Fragment事务不会被记录在回退栈中。当用户按下返回键时,Activity将结束或返回到前一个Activity,而不会返回到之前的Fragment。

  • 适用场景:适合在需要完全替换当前Fragment或者在特定流程中不需要返回的情况。例如,当用户完成某个操作后跳转到"完成"页面时,可能不希望用户能够返回到之前的页面。

  • 代码示例:

    java 复制代码
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, new MyFragment());
    // 不调用 addToBackStack
    transaction.commit();
  • 用户体验:用户按下返回键时,可能会返回到Activity而不是Fragment,这可能会导致用户体验的中断。

总结

  • 加入回退栈:允许用户通过返回键返回到之前的Fragment,适合需要多层级界面导航的场景。
  • 不加入回退栈:直接替换当前Fragment,不允许用户返回,适合完成或结束流程的场景。

通过合理地使用回退栈,可以改善用户的导航体验,使应用更加友好和易于使用。

相关推荐
滕州市燕猫虎计算机科技工作室个体工商户6 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
志尊宝8 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
后季暖9 小时前
电商问数笔记(2)
笔记
xier_ran9 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
geovindu9 小时前
sql:Search-Optimized SQL Queries using mysql 9.0
android·数据库·sql·mysql·数据库开发·数据库架构
星恒随风11 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
罗西的思考11 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (7)— 混合机制
笔记·学习
知之则吱吱11 小时前
Android 开发者验证机制迎来新变化:核心要求、实施时间与开发者应对指南
android·google
ClinicTech12 小时前
婴儿培养箱技术笔记:温控、报警与数据记录的三层架构
笔记
xiaominngtongxue12 小时前
从一次接触网实训课看中职实训教学的组织逻辑
笔记