0
点赞
收藏
分享

微信扫一扫

android lifecycle使用

是她丫 2022-03-27 阅读 45
android

直接看activity代码 

这是没有使用lifecycle写的代码 

package com.nyw.lifecycledemo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;

/***
 * Jetpack
 * 我们实现统计一个用户使用APP时间,传统写法都写在Activity生命周期关联一起,无法在其他位置执行,使用Lifecycle实现,则不需要在activity里执行
 */
public class MainActivity extends AppCompatActivity {
    private Chronometer ct_text_time;
    private long elapsedTime;
    private Button btn_LifeCycle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        ct_text_time=findViewById(R.id.ct_text_time);
        findViewById(R.id.btn_LifeCycle).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //打开 新的页面测试 Lifecycle解藕,在做一些业务需要在activity生命周期里执行的业务,现在不需要把代码写到activity都可以在生命周期执行
                Intent intent=new Intent(MainActivity.this,LifecycleTestView.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        //获取现在时间减暂停使用时间回到上次使用时间
        ct_text_time.setBase(SystemClock.elapsedRealtime()-elapsedTime);
        ct_text_time.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //获取系统时间减上次使用时间
        elapsedTime=SystemClock.elapsedRealtime()-ct_text_time.getBase();
        ct_text_time.stop();
    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <Chronometer
            android:id="@+id/ct_text_time"
            android:layout_width="match_parent"
            android:gravity="center"
            android:layout_marginTop="20dp"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/btn_LifeCycle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="使用LifeCycle实现"/>
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

使用 Lifecycle实现的代码 

自定义一个Chronometer

package com.nyw.lifecycledemo;

import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Chronometer;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

public class MyChronomcler  extends Chronometer implements LifecycleObserver {
    private long elapsedTime;

    public MyChronomcler(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    //添加注解实现生命周期方法
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private void startMeter(){
        //获取现在时间减暂停使用时间回到上次使用时间
        setBase(SystemClock.elapsedRealtime()-elapsedTime);
        start();
    }
    //添加注解实现生命周期方法
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    private void stopMeter(){
        //获取系统时间减上次使用时间
        elapsedTime=SystemClock.elapsedRealtime()-getBase();
        stop();
    }
}
package com.nyw.lifecycledemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

/**
 * 新的页面测试 Lifecycle解藕,在做一些业务需要在activity生命周期里执行的业务,现在不需要把代码写到activity都可以在生命周期执行
 */
public class LifecycleTestView extends AppCompatActivity {
   private MyChronomcler chronomcler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle_test_view);
        chronomcler=findViewById(R.id.chronomcler);
        //Lifecycle 监听设置
        getLifecycle().addObserver(chronomcler);

    }
}
activity_lifecycle_test_view.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".LifecycleTestView">
    <com.nyw.lifecycledemo.MyChronomcler
        android:id="@+id/chronomcler"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_marginTop="20dp"
        android:layout_height="wrap_content"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

 

举报

相关推荐

0 条评论