<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      android架構組件Lifecycle

      2023-07-08 22:15  ttylinux  閱讀(74)  評論(0)    收藏  舉報
      Lifecycle 組件指的是 android.arch.lifecycle 包下提供的各種類與接口,可以讓開發者構建能感知其他組件(主要指Activity 、Fragment)生命周期(lifecycle-aware)的類。
       
      在android開發的過程中,我們常常需要讓一些操作能夠感知Activity/Fragment的生命周期,從而實現在活動狀態下允許操作,而在銷毀狀態下需要自動禁止操作,釋放資源,防止內存泄露。例如大名鼎鼎的圖片加載框架 Glide 在 Acticiy/Fragment 處于前臺的時候加載圖片,而在不可見的狀態下停止圖片的加載,又例如我們希望 RxJava 的 Disposable 能夠在Activity/Fragment 銷毀是自動 dispose。Lifecycle 的出現,讓開發者們能夠輕易地實現上述的功能。
       
      使用
      假設有一個Presenter,需要在Activity的各個生命周期,執行相應的方法,那么,只需要實現LifecycleObserver,這樣,在Activity處于相應的生命周期的時候,相應的方法就會被調用:
      public class MyPresent implements IPresent, LifecycleObserver {
      
      
          @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
          @Override
          public void onCreate() {
              LogUtil.i(TAG, "onCreate");
          }
      
      
          @OnLifecycleEvent(Lifecycle.Event.ON_START)
          @Override
          public void onStart() {
              LogUtil.i(TAG, "onStart");
          }
      
      
          @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
          @Override
          public void onResume() {
              LogUtil.i(TAG, "onResume");
          }
      
      
          @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
          @Override
          public void onPause() {
              LogUtil.i(TAG, "onPause");
          }
      
      
          @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
          @Override
          public void onStop() {
              LogUtil.i(TAG, "onStop");
          }
      
      
          @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
          @Override
          public void onDestory() {
              LogUtil.i(TAG, "onDestory");
          }
      }
      上述代碼實現的是一個觀察者,被觀察者是Activity,Activity會將生命周期中的方法回調通知到觀察者中對應的方法
      然后在需要監聽的 Activity 中注冊:
      public class MyActivity extends AppCompatActivity {
      
          protected MyPresent myPresent;
      
          @Override
          public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
              super.onCreate(savedInstanceState, persistentState);
      
              getLifecycle().addObserver(new MyPresent()); //添加監聽對象
          }
      
      }

      原理:

      • LifecycleOwner:生命周期的事件分發者,在 Activity/Fragment 他們的生命周期發生變化的時發出相應的 Event 給 LifecycleRegistry。
      • LifecycleObserver:生命周期的觀察者,通過注解將處理函數與希望監聽的Event綁定,當相應的Event發生時,LifecycleRegistry會通知相應的函數進行處理。
      • LifecycleRegistry:控制中心。它負責控制state的轉換、接受分發event事件。

       

      Lifecycle使用的三種基本使用方式:
       
      第一種使用方式。使用@onLifecycleEvent注解。注解處理器會將該注解解析并動態生成GeneratedAdapter代碼,這個GeneratedAdapter會把對應的 Lifecycle.Event 封裝為方法調用。最終通過GenericLifecycleObserver的onStateChanged方法調用生成的GeneratedAdapter的callMechods方法進行事件分發
      public class MyLifeCycleObserver implements LifeCycleObserver {
          @onLifecycleEvent(LifeCycle.Event.ON_CREATE)
          public onCreate(LifeCycleOwner owner) {
               //doSomething
          }
          @onLifecycleEvent(LifeCycle.Event.ON_DESTROY)     
      public onDestroy(LifeCycleOwner owner) {         //doSomething     } } public class MainActivity extends AppCompatActivity {     @override     public void onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         setContentView(R.layout.activity_main)         getLifecycle().addObserver(new MyLifeCycleObserver());     } }
      上述的例子中的 MyLifeCycleObserver 將會在編譯時,生成GeneratedAdapter代碼如下:
      public class MyLifeCycleObserver_LifecycleAdapter implements GeneratedAdapter {
      
      
          final MyLifeCycleObserver mReceiver;
      
      
          MyLifeCycleObserver_LifecycleAdapter(MyLifeCycleObserver receiver) {
              //mReceiver就是我們開發者傳入的MyLifeCycleObserver
              this.mReceiver = receiver;
          }
      
      
          //callMechod方法會被GenericLifecycleObserver的onStateChanged方法調用,用以分發生命周期
          @Override
          public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny, MethodCallsLogger logger) {
              boolean hasLogger = logger != null;
              if (onAny) {
                  return;
              }
      
      
              //如果生命周期事件是ON_CREATE,那么調用MyLifeCycleObserver的onCreate方法
              if (event == Lifecycle.Event.ON_CREATE) {
                  if (!hasLogger || logger.approveCall("onCreate", 2)) {
                      mReceiver.onCreate(owner);
                  }
                  return;
              }
      
      
              //如果生命周期事件是ON_DESTROY,那么調用MyLifeCycleObserver的onDestroy方法
              if (event == Lifecycle.Event.ON_DESTROY) {
                  if (!hasLogger || logger.approveCall("onDestroy", 2)) {
                      mReceiver.onDestroy(owner);
                  }
                  return;
              }
          }
      }
      第二種使用方式。直接繼承 GenericLifecycleObserver,并實現onStateChange 方法:
      public class MyLifeCycleObserver extends GenericLifeCycleObserver {
      
      
          @override
          void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
              if(event == LifeCycleEvent.Event.ON_CREATE) {
                  //dosomething
              } else if(event == LifeCycleEvent.Event.ON_DESTROY) {
                  //doSomething
              }    
          }
      }
      
      
      public class MainActivity extends AppCompatActivity {
      
      
          @override
          public void onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_main)
              getLifecycle().addObserver(new MyLifeCycleObserver());
          }
      }
       第三種使用方式。繼承 DefaultLifecycleObserver 接口(DefaultLifecycleObserver 又繼承自 FullLifecycleObserver接口),并實現 FullLifecycleObserver 接口的 onCreate、onStart、onResume、onPause、onStop、onDestroy 等對應各自生命周期的方法
      class MyLifycycleObserver implements DefaultLifecycleObserver {
      
      
          @Override
          public void onCreate(@NonNull LifecycleOwner owner) {
              //doSomething
          }
      
      
          ......
      
      
          @Override
          public void onDestroy(@NonNull LifecycleOwner owner) {
              //doSomething   
          }
      }
      
      
      public class MainActivity extends AppCompatActivity {
      
      
          @override
          public void onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_main)
              getLifecycle().addObserver(new MyLifeCycleObserver());
          }
      }

       

       

      主站蜘蛛池模板: 久久精品一本到99热免费| 国产精品99区一区二区三| 国产大尺度一区二区视频| 4hu44四虎www在线影院麻豆| 久久国产免费直播| 欧美熟妇xxxxx欧美老妇不卡| 亚洲性线免费观看视频成熟 | 国产卡一卡二卡三免费入口| 亚洲国产欧美日韩欧美特级| 国产精品中文字幕日韩| 国产成人小视频| 884aa四虎影成人精品| 久久久无码精品亚洲日韩蜜臀浪潮| 第一精品福利导福航| 天堂8中文在线最新版在线| 免费国产精品黄色一区二区| 亚洲精品香蕉一区二区| 久久高潮少妇视频免费| 安宁市| 亚洲人成电影网站 久久影视| 国产成人午夜福利在线播放| 久久精品人人做人人爽97| 国产成人高清精品亚洲| 伊人久久久av老熟妇色| 亚洲国产片一区二区三区| 日本亲近相奷中文字幕| 人妻伦理在线一二三区| 性无码专区无码| 免费无码一区无码东京热| 久青草视频在线观看免费| 亚洲av日韩在线资源| 深夜福利视频在线播放| 最新亚洲av日韩av二区| 精品九九人人做人人爱| 精品国产一区二区三区四区| 大屁股国产白浆一二区| 亚洲熟妇av综合一区二区| 久久国产免费观看精品3| 91久久偷偷做嫩草影院免费看| 亚洲综合国产伊人五月婷| 大伊香蕉在线精品视频75|