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所带来的好处。

  • 相关阅读:
    xray与burp联动被动扫描
    Xray简单使用教程
    xray安装证书进行http以及https扫描
    brup安装证书抓取https
    Apache Solr JMX服务 RCE 漏洞复现
    pocsuite3使用教程
    Apache-Tomcat-Ajp漏洞(CVE-2020-1938)漏洞复现(含有poc)
    CVE-2019-0193:Apache Solr 远程命令执行漏洞复现
    如何在kalilinux上安装docker
    如何在windows10家庭版上搭建docker
  • 原文地址:https://www.cnblogs.com/best-hym/p/12235446.html
Copyright © 2011-2022 走看看