zoukankan      html  css  js  c++  java
  • Android Jetpack -- Lifecycles篇

    Lifecycles其实从名字看肯定是与生命周期相关,那它与生命周期又有什么联系?
    先参考一下官方文档:
    Lifecycles是一个生命周期感知组件,当Activity或者Fragment的生命周期发生改变的时会,Lifecycles也会做出相应的生命周期状态的改变,它保存关于组件生命周期状态的信息(比如活动或片段),并允许其他对象观察这种状态。
    可以看出Lifecycles是一个组件,具有感知生命周期的功能,既然是个组件,那就说明可以嵌入到其他地方,比如VewModel便是其中之一。

    当我们需要处理与生命周期相关的组件的时候,在没有Lifecycles提供的时候,需要设置各种回调,如下所示:

     package com.example.lifecycle;
     
     import androidx.appcompat.app.AppCompatActivity;
     
     import android.os.Bundle;
     import android.util.Log;
    
     public class MainActivity extends AppCompatActivity {
     
         String TAG = "myTag";
     
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
             Log.d(TAG, "onCreate: ");
         }
     
         @Override
         protected void onStart() {
             super.onStart();
             Log.d(TAG, "onStart: ");
         }
     
         @Override
         protected void onResume() {
             super.onResume();
             Log.d(TAG, "onResume: ");
         }
     
         @Override
         protected void onPause() {
             super.onPause();
             Log.d(TAG, "onPause: ");
         }
     
         @Override
         protected void onStop() {
             super.onStop();
             Log.d(TAG, "onStop: ");
         }
     
         @Override
         protected void onRestart() {
             super.onRestart();
             Log.d(TAG, "onRestart: ");
         }
     
         @Override
         protected void onDestroy() {
             super.onDestroy();
             Log.d(TAG, "onDestroy: ");
         }
     }

    当组件数目过多的时候,便会需要在生命周期回调中管理多个组件从而徒增代码量,使得项目难以维护,而且在生命周期中执行过多的耗时操作极易引起内存泄漏,而这些问题都可以通过Lifecycles来解决。

    使用示例

    以Chronometer为例子来示范生命周期监听

     public class MyChronometer extends Chronometer implements LifecycleObserver {
        private long time;
         public MyChronometer(Context context) {
             super(context);
         }
     
         public MyChronometer(Context context, AttributeSet attrs) {
             super(context, attrs);
         }
     
         public MyChronometer(Context context, AttributeSet attrs, int defStyleAttr) {
             super(context, attrs, defStyleAttr);
         }
     
         //以注解的形式完成监听
         @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
         private void stopMeter(){
             time = SystemClock.elapsedRealtime() - getBase();
             stop();
         }
     
         @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
         private void resumeMeter(){
             setBase(SystemClock.elapsedRealtime() - time);
             start();
         }
     }

    然后Activity只需要添加观察者即可

     public class LifecyclesActivity extends AppCompatActivity {
     
        MyChronometer chronometer;
     
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_lifecycles);
     
             chronometer = findViewById(R.id.meter);
             getLifecycle().addObserver(chronometer);
         }
     }

    这样就使得Activity与Chronometer之间解耦了,Chrononmeter自我实现了良好的封装,也方便了代码的移植。
    这也就是使用Lifecycles所带来的好处。

  • 相关阅读:
    基于struts2和hibernate的登录和注册功能——完整实例
    (转载)Hibernate的事务管理
    (转载)hibernate缓存
    Hibernate映射解析——七种映射关系
    Hibernate核心组件详解
    Struts2国际化——完整实例代码
    Struts2的手工自定义验证--完整实例代码
    Struts2内置校验器——完整实例代码
    Struts2自定义拦截器——完整实例代码
    Struts2工作原理及流程
  • 原文地址:https://www.cnblogs.com/best-hym/p/12235446.html
Copyright © 2011-2022 走看看