package Ġcom . zone . lib Ċ Ċ import Ġandroidx . collection . Sparse Array Compat Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġq ib in Ġon Ġ 1 6 - 9 - 2 5 . Ċ Ġ* Ġextend ï¼ļ Zone Ċ Ġ* Ċ Ġ* Ġ Ġæ¨ ª åĲĳ åĪĹè¡¨ ( æĻ®éĢļ ) Ġ 0 - 1 - 2 - 3 Ċ Ġ* Ċ Ġ* Ġ Ġæ¯ı ä¸ª ä½įç½® Ġ å¯¹åºĶ ä¸¤ä¸ª ç« ĸ åĲĳ åĪĹè¡¨ Ġa ( release ), b ( holding ) ï¼Ī ä¸į èĢĥèĻĳ æķĪ çİĩ è¯Ŀ äºĨ ( åįķ åĪĹè¡¨ ) Ġ Ġ è¿Ļæł· ç®Ģåįķ ãĢĤ ï¼ī Ċ Ġ* Ċ Ġ* Ġ Ġæ¯ı ä¸ª ä½įç½® Ġ åŃĺ çĿĢ ä¸Ģä¸ª Ġ ç« ĸ åĲĳ åĪĹè¡¨ ĠãĢĤ æīĢæľī æĥħåĨµ Ċ Ġ* ĠĠĠĠĠĠ 1 . æ²¡æľī Ġ ĠçĶŁæĪĲ Ġ- Ġ åıĸ åĩº Ċ Ġ* ĠĠĠĠĠĠ 2 . æľī Ġ Ġæ ² ¡ æľī è¢« æĮģ æľī Ġ- åıĸ åĩº Ċ Ġ* ĠĠĠĠĠĠ 3 . æľī ĠĠ Ġ è¢« æĮģ æľī Ġï¼Į çĶŁæĪĲ Ġ- åıĸ åĩº Ċ Ġ* Ċ Ġ* Ġä½¿çĶ¨ èĮĥ ä¾ĭ : å¦Ĥæŀľ Ġåľ¨ view çļĦ on Measure ä¸Ń Ġæ¯ı æ¬¡ èµ° éĥ½ä¼ļ å¤į çĶ¨ å®ŀä¾ĭ å¦Ĥæŀľ æ²¡æľī åĪĽå»º Ċ Ġ* Ċ Ġ* Ġ åįķåħĥ æµĭè¯ķ ï¼ļ ĠRe cycler Pool Test . kt Ċ Ġ*/ Ċ class ĠRe cycler Pool < T >( private Ġval Ġm Create Factory : ĠCreate Factory < T >) Ġ{ ĊĠĠĠ Ġinterface ĠCreate Factory < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠB inder ( var Ġhorizontal Key : ĠInt Ġ= Ġ- 1 , Ġvar Ġis Release : ĠBoolean Ġ= Ġtrue ) ĊĠĠĠ Ġinternal Ġclass ĠDouble List < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġholding Set : ĠHashSet < T > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHashSet < T >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrelease Set : ĠHashSet < T > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHashSet < T >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// android Ġ ĠæĽ ¿ æį¢ æĪĲ Sparse Array Compat ĊĠĠĠ Ġprivate Ġval Ġm Pool : ĠSparse Array Compat < Double List < T > ?> Ġ= ĠSparse Array Compat () ĊĠĠĠ Ġprivate Ġval Ġinstance Bind Map : ĠHashMap < T , ĠB inder > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠHashMap < T , ĠB inder >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( key : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æ²¡æľī çļĦè¯Ŀ Ġ æĶ¾ åħ¥ ä¸Ģä¸ª , res Ġ è¿Ļ åĽŀ ä¸Ģå®ļ æľī äºĨ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġget Double List ( key ) ĊĠĠĠĠĠĠĠ Ġ// çľĭ çľĭ Ġrelease ä¸Ń æľī æ²¡æľī Ġ== Ġ> Ġæľī åĪĻ è¿ĶåĽŀ è¿Ļä¸ª Ġ Ġ| Ġ Ġæ ² ¡ æľī çĶŁæĪĲ ä¸Ģä¸ª Ġ å¹¶ è¿ĶåĽŀ è¿Ļä¸ª ĊĠĠĠĠĠĠĠ Ġreturn Ġres . release Set . first OrNull () Ġ?: Ġm Create Factory . newInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . release Set . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å®ŀä¾ĭ çĶŁæĪĲ çļĦæĹ¶åĢĻ Ġ Ġ ç»ĳå®ļ å¯¹è±¡ Ġ æĶ¾ åħ¥ ä½įç½® , ä¸İ æĺ¯åĲ¦ Ġ éĩĬæĶ¾ å±ŀæĢ§ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Bind Map . put ( this , ĠB inder ( key )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Double List ( key : ĠInt ): ĠDouble List < T > Ġ= ĊĠĠĠĠĠĠĠ Ġm Pool . get ( key ) Ġ?: ĠDouble List < T >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pool . put ( key , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Release ( item : ĠT ): ĠBoolean Ġ= Ġsafe Check ( item ). is Release ĊĊĠĠĠ Ġfun Ġrelease ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbind Obj Ġ= Ġsafe Check ( item ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bind Obj . horizontal Key Ġ< Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġget Double List ( bind Obj . horizontal Key ) ĊĠĠĠĠĠĠĠ Ġres . holding Set . remove ( item ) ĊĠĠĠĠĠĠĠ Ġres . release Set . add ( item ) ĊĠĠĠĠĠĠĠ Ġbind Obj . is Release Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsafe Check ( item : ĠT ): ĠB inder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance Bind Map [ item ] Ġ?: Ġthrow ĠIllegalStateException (" this Ġobj Ġnot Ġcreate Ġby ĠRe cycler Pool 's Ġm Create Factory ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġholding ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbind Obj Ġ= Ġsafe Check ( item ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bind Obj . horizontal Key Ġ< Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġget Double List ( bind Obj . horizontal Key ) ĊĠĠĠĠĠĠĠ Ġres . release Set . remove ( item ) ĊĠĠĠĠĠĠĠ Ġres . holding Set . add ( item ) ĊĠĠĠĠĠĠĠ Ġbind Obj . is Release Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ