【Jetpack】Lifecycle之自定義LifecycleOwner

Lifecycle設計講解

Lifecycle的設計其實十分簡單,主要就是Lifecycle對象和LifecycleOwner接口

  • Lifecycle用于記錄對象的生命周期,以及在生命周期發生改變時通知外部

  • LifecycleOwner用于表示對象具備生命周期管理能力

  • LifecycleOwner的實現方式很簡單,提供一個Lifecycle來管理生命周期即可

  • Lifecycle的功能也很簡單,就是setState,然后notifyObserver

  • androidx提供了LifecycleRegistry來直接創建一個簡單的Lifecycle

  • 這樣任何對象,都可能通過創建LifecycleRegistry+實現LifecycleOwner接口的方式,快速實現Lifecycle功能

  • Lifecycle對外的使用方式是,observable.observe(owner, observer)

  • 這行代碼的實質是,owner.lifecycle.addObserver(compose(observable, observer))

  • 當lifecycle結束時,會通知observable,observable同時從訂閱者列表中移除observer

  • 這樣就實現了observer監聽observable,并且在owner銷毀時停止監聽的效果

實現代碼
package com.android.appimport androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.lifecycle.MutableLiveDataclass LiveObject : LifecycleOwner {override val lifecycle = LifecycleRegistry(this)constructor() {lifecycle.currentState = Lifecycle.State.CREATED}fun start() {lifecycle.currentState = Lifecycle.State.RESUMED}fun dispose() {lifecycle.currentState = Lifecycle.State.DESTROYED}
}class CallingObject {private val lifecycleObject = LiveObject()private val observable = MutableLiveData("")fun doSomethingWhenObjectIsAlive() {observable.observe(lifecycleObject) {println("event: $it")}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37603.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37603.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37603.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

賽目科技三度遞表:凈利率及資產回報率不斷下滑,經營成本越來越高

《港灣商業觀察》施子夫 5月29日,北京賽目科技股份有限公司(以下簡稱,賽目科技)第三次遞表港交所,公司擬主板上市,獨家保薦機構為光銀國際。 公開信息顯示,賽目科技此前曾于2022年12月&#x…

Java全套智慧校園系統源碼:核心功能、發展趨勢、基于電子班牌: Android 7.1+小程序:原生開發+多學校Saas 模式

Java全套智慧校園系統源碼:核心功能、發展趨勢、基于電子班牌: Android 7.1小程序:原生開發多學校Saas 模式 智慧校園系統是一個集成了多種功能的綜合性平臺,旨在提升校園內的教學、管理、服務等方面的效率和體驗。那么&#xff…

比較(五)利用python繪制棒棒糖圖

比較(五)利用python繪制棒棒糖圖 棒棒糖圖(Lollipop plot)簡介 棒棒糖圖實際上是修飾后的條形圖。當在處理大量的值,并且當這些值都很高時,棒棒糖圖就很有用。 快速繪制 基于matplotlib import pandas as…

【前端環境1】安裝nvm

【前端環境1】安裝nvm 寫在最前面一、下載nvm二、安裝教程三、驗證nvm安裝 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻時光,感謝你的陪伴與支持 ~ 🚀 歡迎一起踏上探險之旅,挖掘無限可能,共同成…

狗都能看懂的Reinforcement Learning簡介

文章目錄 一、什么是強化學習二、強化學習的應用 一、什么是強化學習 強化學習的流程可以用上面這張圖來說明:智能體(Agent)對環境進行觀測,然后根據觀測結果(Observation / State)采取相應的動作&#xff…

實現Ubuntu計劃任務的反彈shell

一、實驗環境 Ubuntu:IP地址:192.168.223.156 Kali : IP地址:192.168.223.152 二、編寫crontab計劃任務 在Ubuntu的系統中使用crontab -e命令編寫計劃任務,如下所示: 作用:是將一個交互式的bash …

device_node和platform_device的生成流程

1. machine_desc的匹配 《這篇》有介紹DT_MACHINE_START的一些初始化操作,匹配上就會在后續的初始化中調用DT_MACHINE_START的成員來初始化系統的設備樹,時鐘,中斷等 start_kernelsetup_arch(&command_line);mdesc setup_machine_fdt(…

行列視報表系統制作的報表與廠級監控信息系統(SIS)系統中的報表有什么區別?

廠級監控信息系統是集過程實時監測、優化控制及生產過程管理為一體的廠級自動化信息系統,是處于DCS以及相關輔助程控系統與全廠管理信息系統之間的一套實時廠級監控信息系統,該產品也是本公司的一套獨立產品。 SIS系統中的報表只是其中的一個模塊&#…

混合云管道的未來:集成 MinIO、Tailscale 和 GitHub Actions

數據處理是現代軟件開發的基本實踐。它使團隊能夠自動收集、處理和存儲數據,確保高質量的數據和高效的處理。 在本文中,我們將探討如何建立一個全面的數據處理管道,重點介紹如何使用 Tailscale GitHub Action 進行安全網絡。此設置還將包含 …

植物大戰僵尸雜交版手機下載與安裝全攻略

植物大戰僵尸雜交版是一款深受玩家喜愛的策略冒險游戲,以其豐富的植物種類、多樣的關卡設計和趣味的玩法著稱。本文將為您提供詳細的下載與安裝教程,幫助您快速上手,享受游戲帶來的樂趣。 游戲簡介 植物大戰僵尸雜交版在傳統玩法的基礎上&a…

【機器學習】語音轉文字 - FunASR 的應用與實踐(speech to text)

本文將介紹 FunASR,一個多功能語音識別模型,包括其特點、使用方法以及在實際應用中的表現。我們將通過一個簡單的示例來展示如何使用 FunASR 將語音轉換為文字,并探討其在語音識別領域的應用前景。 一、引言 隨著人工智能技術的不斷發展&am…

linux的安全技術和防火墻

一、安全技術 1.入侵檢測系統:特點式不阻斷網絡訪問,主要式提供報警和事后監督,不主動介入,默默的看著你(相當于360安全衛士) 2.入侵防御系統:透明模式工作,對數據包,網…

平價高性價比藍牙耳機有哪些?盤點好用平價的藍牙耳機推薦

在當今快節奏的生活中,藍牙耳機已經成為人們日常生活中不可或缺的配件,它們不僅讓我們可以在行走、工作或者鍛煉時享受音樂,還提供了便利的通話功能。然而,市面上藍牙耳機種類繁多,價格相差甚遠,大家往往難…

走進開源企業 | 湖南大學OpenHarmony技術實訓活動在開鴻智谷順利舉辦!

6月24日-6月26日,2024開放原子校源行之湖南大學信息科學與工程學院師生走進開源企業實訓交流活動順利落下帷幕。湖南大學信息科學與工程學院的師生代表團一行90人參與了湖南開鴻智谷數字產業有限公司(以下簡稱“開鴻智谷”)與母公司拓維信息系…

HEC-HMS水文模型教程

原文鏈接:HEC-HMS水文模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607904&idx5&sn1a210328a3fc8f941b433674d8fe2c85&chksmfa826787cdf5ee91d01b6981ebd89deac3e350d747d0fec45ce2ef75d7cb8009341c6f55114d&token90645021…

放射性單位請問放射性物質的單位cpm、dpm什么意思

放射性單位請問放射性物質的單位cpm、dpm什么意思?和Ci怎樣換算?現在做同位素,搞不清楚劑量了.  anse7esn 1年前 已收到2個回答舉報 贊 渡海 幼苗 共回答了22個問題采納率:90.9% 舉報 放射性活度單位 放射性核素在單位時間內發生衰變…

vue項目手機錄音

手機實現錄音功能&#xff0c;安卓和蘋果都可。功能&#xff0c;點擊開始錄制錄音后&#xff0c;隨時可以停止錄音&#xff0c;如果不點擊停止最多錄制15秒。 頁面結構 <!--音頻--> <div class"audio-box"><audio id"audioPlayer"controlsc…

修改element-ui日期下拉框datetimePicker的背景色樣式

如圖&#xff1a; 1、修改背景色 .el-date-picker.has-sidebar.has-time { background: #04308D; color: #fff; border: 1px solid #326AFF } .el-date-picker__header-label { color: #ffffff; } .el-date-table th { color: #fff; } .el-icon-d-arrow-left:before { color: …

從零搭建Java酒店預訂系統:實戰指南_01

項目介紹 一、 項目概述 項目背景: 模擬真實酒店預訂流程,實現核心功能角色設定: 顧客、前臺、后勤管理(可選:管理員)技術選型: Java + Spring Boot + 數據庫(MySQL)+ 前端框架(Vue.js/React等)二、 需求分析與功能設計 功能模塊劃分: 用戶模塊:用戶注冊、登錄、…

Postgres14.4(Docker安裝)

Postgres14.4&#xff08;Docker安裝&#xff09; 一&#xff0c;Docker拉取鏡像 docker pull postgres:14.4 #檢查鏡像是否拉取成功 docker images | grep postgres二&#xff0c;新建掛載目錄&#xff0c;并運行容器 mkdir -p /data/postgre/data chmod 777 /data/postgre…