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的生命周期。
实例源代码请查看: