package Ġcom . fu us y . common . support čĊč Ċ import Ġandroid . util . Log č Ċ import Ġandroidx . annotation . MainThread č Ċ import Ġandroidx . lifecycle . Lifecycle Owner č Ċ import Ġandroidx . lifecycle . Mutable LiveData č Ċ import Ġandroidx . lifecycle . Observer č Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean čĊč Ċ /** čĊ Ġ* Ġ åįķ äºĭä»¶ åĵįåºĶ çļĦ live Data ï¼Į åıªæľī ä¸Ģä¸ª æİ¥æĶ¶ èĢħ èĥ½ æİ¥æĶ¶ åĪ° ä¿¡æģ¯ ï¼Į åı¯ä»¥ éģ¿åħį ä¸į å¿ħè¦ģ çļĦ ä¸ļåĬ¡ çļĦ åľºæĻ¯ ä¸ŃçļĦ äºĭä»¶ æ¶Īè´¹ éĢļçŁ¥ čĊ Ġ* Ġ åıªæľī è°ĥçĶ¨ call çļĦæĹ¶åĢĻ ï¼Į observer æīįèĥ½ æĶ¶ åĪ° éĢļçŁ¥ čĊ Ġ*/ č Ċ open Ġclass ĠSingle LiveData < T > Ġ: ĠMutable LiveData < T >() Ġ{ čĊčĊĠĠĠ Ġprivate Ġval Ġm Pending Ġ= ĠAtomic Boolean ( false ) čĊčĊĠĠĠ Ġ@ MainThread čĊĠĠĠ Ġoverride Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠObserver < in ĠT >) Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( has Active Observer s ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" å¤ļä¸ª è§Ĥ å¯Ł èĢħ åŃĺåľ¨ çļĦæĹ¶åĢĻ ï¼Į åıª ä¼ļ æľīä¸Ģä¸ª è¢« éĢļçŁ¥ åĪ° æķ°æį® æĽ´æĸ° ") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġsuper . observe ( owner , ĠObserver Ġ{ Ġt Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pending . compare AndSet ( true , Ġfalse )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Changed ( t ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠsetValue ( value : ĠT ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Pending . set ( true ) čĊĠĠĠĠĠĠĠ Ġsuper . setValue ( value ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ MainThread čĊĠĠĠ Ġfun Ġcall () Ġ{ čĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġnull čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Single LiveData " čĊĠĠĠ Ġ} č Ċ }