美文网首页
Android Lifecycle-aware componen

Android Lifecycle-aware componen

作者: Yim_ | 来源:发表于2018-09-26 07:55 被阅读0次

Lifecycle-aware components是什么

Lifecycles是生命周期感知组件。

Lifecycle-aware components的功能

可以感知有生命周期的组件的生命周期变化,例如Activity和Fragment的生命周期的变化。

Lifecycle-aware components包含那些组件

Lifecycle组件包括LifecycleOwnerLifecycleObserver
LifecycleOwner是具有生命周期的对象,比如Activity和Fragment;
LifecycleObserver观测LifecycleOwner,并在生命周期变化时收通知。

如何使用Lifecycles

1.引入相关依赖到项目中

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // use -ktx for Kotlin
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // use kapt for Kotlin
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

2.编写监听类

package com.architecture.demo.lifecycle;

import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
import android.util.Log;

import com.architecture.demo.util.CONSTANT;

public class MyObserver implements LifecycleObserver {
    private Lifecycle lifecycle;

    public MyObserver(Lifecycle lifecycle) {
        this.lifecycle = lifecycle;
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    protected void onCreate() {
        Log.i(CONSTANT.TAG_LIFECYCLE, "onCreate");

        Lifecycle.State currentState = getCurrentState();
        Log.i(CONSTANT.TAG_LIFECYCLE, "state_" + currentState);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    protected void onStart() {
        Log.i(CONSTANT.TAG_LIFECYCLE, "onStart");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    protected void onResume() {
        Log.i(CONSTANT.TAG_LIFECYCLE, "onResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    protected void onPause() {
        Log.i(CONSTANT.TAG_LIFECYCLE, "onPause");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    protected void onStop() {
        Log.i(CONSTANT.TAG_LIFECYCLE, "onStop");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    protected void onDestroy() {
        Log.i(CONSTANT.TAG_LIFECYCLE, "onDestroy");
    }

    public Lifecycle.State getCurrentState() {
        return lifecycle.getCurrentState();
    }
}

3.在Activity中注册该监听

package com.architecture.demo;

import android.arch.lifecycle.Lifecycle;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import com.architecture.demo.lifecycle.MyObserver;
import com.architecture.demo.util.CONSTANT;
import com.architecture.demo.util.Utils;

public class LifecycleActivity extends AppCompatActivity {
    MyObserver myObserver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle);
        myObserver = new MyObserver(getLifecycle());
        getLifecycle().addObserver(myObserver);
    }

    public void getState(View view) {
        Lifecycle.State currentState = myObserver.getCurrentState();
        Utils.showToast(getApplicationContext(), "state_" + currentState);
        Log.i(CONSTANT.TAG_LIFECYCLE, "state_" + currentState);
    }
}

通过以上步骤MyObserver类即可监听LifecycleActivity的生命周期变化了。
生命周期的组件的状态(Activity和Fragment的状态)和Lifecycle.Event的对应关系如下图:

lifecycle-states.png
通过以上步骤既可完成Lifecycles的简单使用。
Demo地址:
https://github.com/CongYiMing/ArchitectureDemo

相关文章

网友评论

      本文标题:Android Lifecycle-aware componen

      本文链接:https://www.haomeiwen.com/subject/boqqnftx.html