Android Architecture Components使用介绍(一)

本文详细介绍了Android Architecture Components中的Lifecycle组件的使用方法及其原理。通过一个具体的地理位置监听案例,展示了如何利用LifecycleObserver接口来同步Activity的生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Android Architecture Components是google针对Android新推出的组件,意在解决Android 组件的生命周期和数据的读取问题。下面从使用到原理,由浅入深的介绍各个模块的使用。

使用
1,Lifecycle。假设我们现在有一个需求,监听当前位置,于是我们写了一个MyLocationListener这个类用来监听位置的变化。但是在Activity的生命周期发生变化的时候,我们需要做相应的处理。例如,在Activity的暂停状态我们是不用继续获取当前的位置的。所以我们一般在这个时候会同样做一个暂停获取位置的操作。为了与Activity的生命周期同步,我们写的这个MyLocationListener这个类实现LifecycleObserver这个接口。

package com.nanguiyu.androidarchitecturetest;

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


public class MyLocationListener implements LifecycleObserver {

    private static String TAG = "MyLocationListener";

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void start(){
        Log.d(TAG,"start");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume(){
        Log.d(TAG,"onResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void stop(){
        Log.d(TAG,"stop");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause(){
        Log.d(TAG,"onPause");
    }
}

然后我们在主Activity中添加注册的方法getLifecycle().addObserver(myLocationListener);
同样如果我们不需要监听Activity的状态了。我们可以在Activity的onDestory方法中去掉监听器getLifecycle().removeObserver(myLocationListener);
下面的代码是MainActivity的全部内容。

package com.nanguiyu.androidarchitecturetest;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private MyLocationListener myLocationListener;

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.dialog_button);
        button.setOnClickListener(this);
        myLocationListener = new MyLocationListener();
        getLifecycle().addObserver(myLocationListener);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        getLifecycle().removeObserver(myLocationListener);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this,DialogActivity.class);
        startActivity(intent);

    }
}

我们特地在MainActivity中加入了一个Dialog样式的Activity,我们知道启动这个Activity之后。主Activity会进入onPause状态。对应的打印状态如下图,刚进入时打印:

12-25 19:57:10.729 6543-6543/com.nanguiyu.androidarchitecturetest D/MyLocationListener: start
12-25 19:57:10.732 6543-6543/com.nanguiyu.androidarchitecturetest D/MyLocationListener: onResume

当弹出Dialog的时候:

12-25 20:00:54.487 6543-6543/com.nanguiyu.androidarchitecturetest D/MyLocationListener: onPause

当去掉Dialog的时候

12-25 20:01:53.303 6543-6543/com.nanguiyu.androidarchitecturetest D/MyLocationListener: onResume

当按下Home按键的时候

12-25 20:02:42.079 6543-6543/com.nanguiyu.androidarchitecturetest D/MyLocationListener: onPause
12-25 20:02:42.511 6543-6543/com.nanguiyu.androidarchitecturetest D/MyLocationListener: stop

通过上面的实例分析,实现LifecycleObserver的MyLocationListener完全监听到了整个Activity的生命周期。
实例源代码请查看:

https://github.com/zf617525633/AndroidArchitectureTest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值