/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 2 Ġx uex iang j ys ( xu ex iang j ys @ 1 6 3 . com ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . xu ex iang . kotlin sample . fragment . coroutines Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . xu ex iang . kotlin sample . core . Base Simple List Fragment Ċ import Ġcom . xu ex iang . x page . annotation . Page Ċ import Ġkotlinx . coroutines .* Ċ Ċ /** Ċ Ġ* ĠCor outine Context Ġ- Ġ åįı ç¨ĭ ä¸Ĭä¸ĭ æĸĩ Ċ Ġ* ĠJob : Ġ æİ§åĪ¶ åįı ç¨ĭ çļĦ çĶŁåĳ½ åĳ¨æľŁ ï¼Ľ Ċ Ġ* ĠCor outine Dispatcher : Ġ åĲĳ åĲĪ éĢĤ çļĦ çº¿ç¨ĭ åĪĨ åıĳ ä»»åĬ¡ ï¼Ľ Ċ Ġ* ĠCor outine Name : Ġ åįı ç¨ĭ çļĦ åĲįç§° ï¼Į è°ĥè¯ķ çļĦæĹ¶åĢĻ å¾Ī æľī çĶ¨ ï¼Ľ Ċ Ġ* ĠCor outine ExceptionHandler : Ġ å¤ĦçĲĨ æľª è¢« æį ķ æį ī çļĦ å¼Ĥå¸¸ ãĢĤ Ċ Ġ* Ċ Ġ* ĠSuper visor Job æĺ¯ä¸Ģä¸ª çī¹æ®Ĭ çļĦ ĠJob ï¼Į éĩĮ éĿ¢çļĦ åŃĲ Job ä¸į çĽ¸ äºĴ å½±åĵį ï¼Į ä¸Ģä¸ª åŃĲ Job å¤±è´¥ äºĨ ï¼Į ä¸į å½±åĵį åħ¶ä»ĸ åŃĲ Job çļĦ æī§è¡Į ãĢĤ Ċ Ġ* Ċ Ġ*/ Ċ @ Page ( name Ġ= Ġ" åįı ç¨ĭ åŁºç¡Ģ ä½¿çĶ¨ ") Ċ class ĠCor outines Basic Fragment Ġ: ĠBase Simple List Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Cor outines - Basic " ĊĊĠĠĠ Ġvar Ġjob : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġlazy Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġmain Scope Ġ= ĠMain Scope () ĊĊĠĠĠ Ġoverride Ġfun Ġinit Simple Data ( lists : ĠMutable List < String >): ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġlists . add (" 1 . ä½¿çĶ¨ Ġrun Blocking Ġ é¡¶ å±Ĥ åĩ½æķ° ï¼Ī å¸¸ çĶ¨äºİ åįķåħĥ æµĭè¯ķ ï¼ī ") ĊĠĠĠĠĠĠĠ Ġlists . add (" 2 . ä½¿çĶ¨ ĠGlobal Scope Ġ åįķ ä¾ĭ å¯¹è±¡ ï¼Ī ä¸į æİ¨èįĲ ä½¿çĶ¨ ï¼ī ") ĊĠĠĠĠĠĠĠ Ġlists . add (" 3 . éĢļè¿ĩ ĠCor outine Context ĠåĪĽå»º ä¸Ģä¸ª ĠCor outine Scope Ġå¯¹è±¡ ï¼Ī æİ¨èįĲ ä½¿çĶ¨ ï¼ī ") ĊĠĠĠĠĠĠĠ Ġlists . add (" åĲ¯åĬ¨ æ¨¡å¼ı ãĢĲ Coroutine Start . LA ZY ãĢĳ ") ĊĠĠĠĠĠĠĠ Ġreturn Ġlists ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlazy Job Ġ= Ġmain Scope . launch ( start Ġ= ĠCor outine Start . LA ZY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Cor outines () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ"${ result }, å½ĵåīį çº¿ç¨ĭ ï¼ļ ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢļå¸¸ éĢĤ çĶ¨äºİ åįķåħĥ æµĭè¯ķ çļĦ åľºæĻ¯ ï¼Į èĢĮ ä¸ļåĬ¡ å¼Ģåıĳ ä¸Ń ä¸įä¼ļ çĶ¨ åĪ° è¿Ļç§į æĸ¹æ³ķ ï¼Į åĽłä¸º å®ĥ æĺ¯ çº¿ç¨ĭ éĺ» å¡ŀ çļĦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Cor outines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ"${ result }, å½ĵåīį çº¿ç¨ĭ ï¼ļ ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ġ= ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Coroutine Scope () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ"${ result }, å½ĵåīį çº¿ç¨ĭ ï¼ļ ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Scope Ġ= ĠCor outine Scope ( Job ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġio Scope Ġ= ĠCor outine Scope ( Dispatch ers . IO ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Scope Ġ= ĠCor outine Scope ( Coroutine Name (" Test Name ")) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( Job () Ġ+ ĠDispatch ers . IO Ġ+ ĠCor outine Name (" Test Name ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Cor outines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ"${ result }, å½ĵåīį çº¿ç¨ĭ ï¼ļ ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Job ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdo Cor outines (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æļĤ åģľ ä¸¤ ç§Ĵ ï¼Į æ¨¡ æĭŁ èĢĹ æĹ¶ æĵįä½ľ ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" do Cor outines å®ĮæĪĲ , Ġå½ĵåīį çº¿ç¨ĭ ï¼ļ ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" æĪĲåĬŁ æī§è¡Į do Cor outines " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdo Coroutine Scope () Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æļĤ åģľ ä¸¤ ç§Ĵ ï¼Į æ¨¡ æĭŁ èĢĹ æĹ¶ æĵįä½ľ ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" do Coroutine Scope å®ĮæĪĲ , Ġå½ĵåīį çº¿ç¨ĭ ï¼ļ ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" æĪĲåĬŁ æī§è¡Į do Coroutine Scope " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdo Supervisor Scope () Ġ= Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æļĤ åģľ ä¸¤ ç§Ĵ ï¼Į æ¨¡ æĭŁ èĢĹ æĹ¶ æĵįä½ľ ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" do Supervisor Scope å®ĮæĪĲ , Ġå½ĵåīį çº¿ç¨ĭ ï¼ļ ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" æĪĲåĬŁ æī§è¡Į do Supervisor Scope " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġjob ?. cancel () ĊĠĠĠĠĠĠĠ Ġlazy Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġmain Scope . cancel () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} Ċ Ċ }