Jetpack系列学习笔记整理一 之LifeCycles

2023-05-16

学习最好的途径就是官网和github Demo,先放链接,想看自行跳转:

  1. 官网:https://developer.android.com/topic/libraries/architecture/lifecycle
  2. CodeLab:LifeCycle (官方小课堂...)

Jetpack框架内容之前就接触过,但是一直没有好好系统学习,最近在忙项目还有弄cocos的东西,趁现在有时间了好好整理一下提升一下自己,毕竟google爸爸指明了方向给出了应用架构的方案。奥,大概长这样:

 

Jetpack是一套组件或者工具

 

比如很熟悉的DataBinding ,ViewModel等,接下来我主要学习Architecture架构组件,会从上往下一点一点学习记录。

LifeCycles的作用:它主要是处理生命周期的组件,有很多sdk或者广播接受者或者其他都需要在Activity或者Fragment开始时初始化,在结束时释放以免造成内存泄漏或者其他错误。如果我们有很多管理界面或者组件需要处理,都堆在onStart()onResume()影响周期状态并且难以管理。所以LifeCycle就是用来弹性和隔离的方式解决这个问题,尤其在使用MVVM架构时特别好用,ViewModel处理业务逻辑和数据,可以通过LifeCycle在ViewModel中处理生命周期的操作。

使用

  1. 实现LifecycleObserver接口
  2. LifeCycle的addObserver方法添加观察者
  3. 通过@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 注解方式给方法加上注解,就实现了生命周期的调用

示例:
 

    public class MyObserver implements LifecycleObserver {
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        public void connectListener() {
            ...
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        public void disconnectListener() {
            ...
        }
    }

    myLifecycleOwner.getLifecycle().addObserver(new MyObserver());
    
  • 这个myLifecycleOwner是单一方法接口 它有getLifecycle()方法,26api以上Activity和Fragment已经实现了该接口所以在Activity中使用的时候直接通过getLifecycle().addObserver(new MyObserver());添加使用就行。这样我们就可以在model中处理有关生命周期的一些操作。当然为了安全,可以通过lifecycle.getCurrentState()方法验证是否处于该生命周期
 if (lifecycle.getCurrentState().isAtLeast(STARTED)) {
             
}
  • 如果在api26之前可以通过自定义的方法使用:
    public class MyActivity extends Activity implements LifecycleOwner {
        private LifecycleRegistry lifecycleRegistry;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            lifecycleRegistry = new LifecycleRegistry(this);
            lifecycleRegistry.markState(Lifecycle.State.CREATED);
        }

        @Override
        public void onStart() {
            super.onStart();
            lifecycleRegistry.markState(Lifecycle.State.STARTED);
        }

        @NonNull
        @Override
        public Lifecycle getLifecycle() {
            return lifecycleRegistry;
        }
    }
    

LifeCycle的学习大概就是这样,有关生命周期管理 Google爸爸说了要在ViewModel中处理数据逻辑 但不包括网络请求,尽量不要传递Activity的上下文和View的上下文避免内存泄漏,尽量不要再Activity或者Fragment中处理数据和逻辑,保持干净。当之后学完ViewModel和LiveData 还有DataBinding之后,就会发现,UI显示的处理和异常的处理真的方便。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack系列学习笔记整理一 之LifeCycles 的相关文章

  • Maven异常:Could not find artifact

    Maven异常 xff1a Could not find artifact 执行maven install的时候出现了以下异常 xff1a INFO Scanning for projects ERROR ERROR Some proble
  • git获取最新的tag

    获取git最新的tag标签 git tag n sort 61 taggerdate head n 1 这样获取到的会有合并信息 如果只需要获取到tag名称 xff0c 也可以这样 git tag sort 61 taggerdate he
  • 使用阿里云的函数计算来实现OSS资源的打包下载

    文档地址 xff1a 如何使用函数计算将多个文件打包下载到本地 对象存储 OSS 阿里云 计算函数可以通过对外公网域名进行访问 xff1a 计算函数的参数有几个 xff1a bucket xff1a 使用的OSS的bucket xff0c
  • linux系统上nodejs 报错:node: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27‘ not found

    原因 xff1a 因为当前系统不支持GLIBC 2 27 xff0c 而且node的版本过高 xff0c 但是后来降低了版本还是报这个错误 xff0c 后来发现低版本的软链接在 usr bin xff0c 而高版本的软链接在 usr loc
  • 使用nvm控制nodejs版本

    原因 xff1a 由于项目需要用到两个版本的nodejs xff0c 如果只是一个版本的nodejs的话 xff0c 其中一个项目就会报错 xff0c 所以需要用到nvm进行nodejs版本控制 xff0c 使用不同版本的nodejs来进行
  • opencv 实战案例 (一)

    目录 xff1a 1 用 Canny 算子检测图像轮廓提取车道线任务 xff08 Canny xff09 2 用 findContours 发现硬币轮廓任务 Canny 43 findContours 3 用概率霍夫变换检测车道线任务 Ca
  • 企业微信-构造网页授权链接实现登录

    文档地址 xff1a 构造网页授权链接 接口文档 企业微信开发者中心 注意 xff1a 1 redirect uri xff1a 回调链接地址 xff0c 需要使用urlencode对链接进行处理 2 scope xff1a 如果需要获取成
  • dpkg: 处理软件包 xxx (--configure)时出错解决方法

    问题 xff1a dpkg 处理软件包 libicu dev configure 时出错 xff1a 依赖关系问题 仍未被配置 dpkg 依赖关系问题使得 libxml2 dev amd64 的配置工作不能继续 xff1a libxml2
  • oracle 删除表以及回复数据

    找回删除的表 select object name original name partition name type ts name createtime droptime from recyclebin WHERE original n
  • 银行卡信息查询

    银行卡bin 银行卡信息 请移步到github xff1a https github com burningmyself bank
  • ProcessDefinition是干这个用的

    流程定义ProcessDefinition是对业务过程的完整描述 xff0c 例如请假流程定义 报销流程定义等 流程定义的管理包括部署流程定义 查询流程定义 查看流程定义图和删除流程定义 1 部署流程定义 使用RepositoryServi
  • 截取字符串的三种方法

    众所周知 xff0c java提供了很多字符串截取的方式 下面就来看看大致有几种 span class hljs number 1 span span class hljs built in split span 43 正则表达式来进行截取
  • Iterator主要有三个方法:hasNext()、next()、remove()详解

    一 Iterator的API 关于Iterator主要有三个方法 xff1a hasNext next remove hasNext 没有指针下移操作 xff0c 只是判断是否存在下一个元素 next xff1a 指针下移 xff0c 返回
  • @ModelAttribute用法详解

    转载于 xff1a https blog csdn net harry zh wang article details 57329613 之前项目中并自己并没有怎么使用到过 64 ModelAttribute这个注解 xff0c 接手一个老
  • mysql除法运算保留小数的用法

    参照 xff1a https www cnblogs com owenma p 7097602 html 在工作中会遇到计算小数而且需要显现出小数末尾的0 xff0c 我们会用到DECIMAL这个函数 xff0c 这是一个函数非常强悍 xf
  • IDEA—点击文件代码与目录自动同步对应

    关注微信公众号 xff1a CodingTechWork xff0c 一起学习进步 引言 在使用IDEA的时候 xff0c 我们Ctrl 43 Shift 43 F搜索文件后 xff0c 总是要慢慢找文件在哪个包路径下 如查看路径顶端 xf
  • springboot打包完成之后无法读取到resources下的资源文件

    File privateKeyFile 61 ResourceUtils getFile classpath wx pfx PrivateKey privateKey 61 getPrivateKey privateKeyFile priv
  • 接口签名实现拦截的两种方式

    1 采用spring的aop思想进行拦截 需要自定义注解 xff0c 然后定义切面 xff08 五大类 xff09 然后在定义 xff0c 可以获取所有的参数 2 拦截器的实现方式 自定义拦截器 xff0c 然后对拦截器进行配置即可 配置
  • Java程序员利器,lombok神搭档:delombok插件

    Lombok是一款非常实用Java工具 xff0c 它可以帮助开发人员减少样板代码 xff0c 使开发人员专注业务逻辑 xff0c 在Java界几乎无人不知 但也有一些明显的缺点 xff0c 例如 xff1a 对插件强依赖 xff0c 在团
  • C++bind函数

    1 基本概念 bind函数定义在头文件 functional 中 可以将 bind 函数看作一个通用的函数适配器 xff0c 它接受一个可调用对象 xff0c 生成一个新的可调用对象来 适应 原对象的参数列表 C 43 43 Primer

随机推荐

  • C++值的分类 —— 摘自维基百科

    在C 43 43 11 xff0c 对于值的分类 xff0c 要考虑标识 xff08 identity xff09 与可移动性 xff08 movability xff09 xff0c 二者的组合产生了五种分类 xff1a 基础值类型 左值
  • pytorch 深度学习入门代码 (一)线性回归代码实现

    34 34 34 一维线性回归代码实现 34 34 34 import torch from torch autograd import Variable import matplotlib pyplot as plt import tor
  • pytorch 深度学习入门代码 (三)Logistic 回归代码实现

    span class hljs string 34 34 34 Logistic 回归的代码实现 34 34 34 span span class hljs keyword import span matplotlib pyplot spa
  • pytorch 深度学习入门代码 (四)多层全连接神经网络实现 MNIST 手写数字分类

    net py span class hljs keyword import span torch nn span class hljs keyword as span nn span class hljs class span class
  • CentOs云服务器部署项目全流程

    目录 序工具准备putty安装及使用pscp安装及使用 环境安装及配置serverjre 或jdk 安装及配置mysql安装及配置Tomcat 安装及配置 项目部署上传war包至服务器tomcat无法启动常见问题去除端口号和目录名访问项目项
  • 快速上手MybatisPlus

    首先附上mybatis plus官方文档 本篇参考官方文档记录spring mvc项目接入mybatis plus的全流程及一些问题的解决方案 xff0c 建议优先参考官方文档 开始之前 xff0c 假设数据库已建好并已能正常访问 依赖配置
  • FTP工具类一

    public class FTPClientUtils public static String FTPCONFIG 61 34 config ftpConfig properties 34 private static String LO
  • 在 SourceTree 中使用 git rebase (变基)

    原始状态 假如我们要在 master 分支上进行开发 xff0c 在远端的 master 分支上右键 xff0c 检出 一个自己的开发分支 dev 1 做一些开发 xff0c 提交到本地 xff0c 不要推送 xff08 push xff0
  • 云服务器搭建部署全流程

    本篇记录在centos7 3上部署web项目的全流程及一些问题的解决方案 工具准备 putty安装及使用 PuTTY可用来在windows上连接linux服务器 xff0c 可去PuTTY官网下载安装如果不想每次登录都输入密码 xff0c
  • 三种获取字节码对象的方式及区别

    方式一 xff1a 对象 getClass 方法是 根对象Object的方法 是其他类继承Object的getClass方法 方式二 xff1a 类名 class xff0c 你可以理解为字节码本身就是静态的 xff0c 类加载的时字节码就
  • 关于接口与Object 类的关系

    看到这个标题 xff0c 你或许就会想好自己的那份答案 但事实上这个确实没有答案 xff0c 至少没官方证明它们之间的基友关系 看法一 xff1a 因为老师说 xff0c 你可以把接口看作是特殊的类 xff0c 所以不假思索的就认为接口也
  • 单词博弈Java实现(借鉴“miss若尘”博客中写的解题思路)

    单词博弈Java实现 xff0c 已经通过庞果网的用例测试 代码如下 import java util HashMap public class WordGameFinalTest public static int who String
  • mysql安装时的粗心错误:last error unable to update security settings. access denied for user 'root' @ 'localh

    来自 梦想家haima 39 s blog gt http blog dreamwe cn 这个报错出现在mysql最后 当你看到mysql的最后一步需要设置密码可能你开心得很 Mysql就快安装好了 赶快输入三行密码都是root 结果报下
  • @SuppressWarnings

    简介 xff1a java lang SuppressWarnings是J2SE 5 0中标准的Annotation之一 可以标注在类 字段 方法 参数 构造方法 xff0c 以及局部变量上 作用 xff1a 告诉编译器忽略指定的警告 xf
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • Linux之强大的awk

    来自 梦想家 Haima s blog gt http blog dreamwe cn awk简介 awk是Linux中的一个命令 xff0c 用来做文本处理与分析 xff0c 功能简单强悍 xff0c 同时它也是一门编程语言 awk处理文
  • 手机抓包charles使用

    使用的是charles window 之前使过fiddler但是感觉并没有charles好用以及一目了然 链接 https pan baidu com s 1NMNXa8M4niLObQKIsCNL3A 提取码 2wsa 安装包可以通过连接
  • 安卓Tinker热更新接入踩坑(minSdkVersion 21)

    哎哟 xff0c 这个坑啊 我项目采用的是ARouter 43 Tinker 我接入的是tinkerpathchttp www tinkerpatch com Docs intro按照文档对接 xff0c 我采用的是reflectAppli
  • Android 解压和重新打包system.img

    开始我们的工作前 xff0c 请记住 xff0c Linux一定要学会用file命令分析文件类型 xff0c 这样才好入手 xff0c 否则错了都不知道怎么回事 xff01 xff01 xff01 1 解压system img 先用file
  • Jetpack系列学习笔记整理一 之LifeCycles

    学习最好的途径就是官网和github Demo xff0c 先放链接 xff0c 想看自行跳转 xff1a 官网 xff1a https developer android com topic libraries architecture