Google I/O Android官方新体系架构之:Lifecycle

Google官方在 I/O大会中引入一些列Android新的体系架构内容,其中有一个是Android的Lifecycle。Lifecycle实现的一个重要目的,是实现Android的与Activity和Fragment生命周期相关的逻辑控制进一步的解耦。简单的理解,以前因为要写于Android activity和fragment生命周期相关的控制逻辑时候,不得不在activity或者fragment的onCreate,onStart,onResume里面塞进自己的代码,这样一个结果和现象就是activity或者fragment里面本身的代码量会越来越多,体型越来越臃肿。
Lifecycle实现的目的就是专注于activity或者fragment生命周期的维护管理,相当于与activity或者fragment并行一条生命周期线,在并行的生命周期线里面可以实时维护与activity和fragment生命周期相关的逻辑,而不必再在activity或者fragment里面塞代码。

给出一个具体的例子。


首先要引入Lifecycle。两步:

第一步,需要在项目的build.gradle里面按照Google官方手册配置repositories的maven: maven { url 'https://maven.google.com' } 。但是这样因为墙的原因,难以同步代码更新引用,需要把repositories的maven变一个变成这样:

allprojects {    repositories {        maven { url 'https://dl.google.com/dl/android/maven2' }        jcenter()    }}


第二步,添加dependencies引用:
 compile "android.arch.lifecycle:extensions:1.0.0-alpha4"    compile "android.arch.persistence.room:runtime:1.0.0-alpha4"    annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha4"    annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha4"



下面可以实现Lifecycle。
写一个代码例子说明。现在有一种需求,假设自定义一个View,在这个自定义的view里面,要根据所依赖的activity生命周期切换方法实现不同的逻辑控制代码。
写一个自定义的view,假设就是一个TextView:
package zhangphil.test;import android.arch.lifecycle.Lifecycle;import android.arch.lifecycle.LifecycleObserver;import android.arch.lifecycle.OnLifecycleEvent;import android.content.Context;import android.util.AttributeSet;import android.support.v7.widget.AppCompatTextView;import static android.arch.lifecycle.Lifecycle.State.STARTED;/** * Created by Phil on 2017/8/10. */public class TestClass extends AppCompatTextView implements LifecycleObserver {    private final String TAG = "绑定生命周期";    private boolean enable;    private Lifecycle lifecycle;    private StringBuffer buf;    public TestClass(Context context, AttributeSet attrs) {        super(context, attrs);        buf = new StringBuffer();    }    public void setLifecycle(Lifecycle lifecycle) {        this.lifecycle = lifecycle;    }    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)    public void create() {        if (enable) {            buf.append(System.currentTimeMillis() + "-creat\n");            this.setText(buf);        }    }    @OnLifecycleEvent(Lifecycle.Event.ON_START)    public void start() {        if (enable) {            buf.append(System.currentTimeMillis() + "-start\n");            this.setText(buf);        }    }    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)    public void resume() {        if (enable) {            buf.append(System.currentTimeMillis() + "-resume\n");            this.setText(buf);        }    }    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)    public void pause() {        if (enable) {            buf.append(System.currentTimeMillis() + "-pause\n");            this.setText(buf);        }    }    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)    public void stop() {        if (enable) {            buf.append(System.currentTimeMillis() + "-stop\n");            this.setText(buf);        }    }    public void setLifecycleEanable(boolean b) {        enable = b;        if (lifecycle.getCurrentState().isAtLeast(STARTED)) {            //在这里做一些逻辑判断        }    }}


然后写在布局里面:

<?xml version="1.0" encoding="utf-8"?>    


在main activity里面添加以下代码,然后就实现了自定义的view,在脱离了原有的activity后,能够在自己的代码块中,并行的和activity实现生命周期相关的控制逻辑。
package zhangphil.test;import android.arch.lifecycle.LifecycleRegistry;import android.arch.lifecycle.LifecycleRegistryOwner;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity implements LifecycleRegistryOwner {    private LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TestClass testClass = (TestClass) findViewById(R.id.test_view);        testClass.setLifecycle(getLifecycle());        getLifecycle().addObserver(testClass);        testClass.setLifecycleEanable(true);    }    @Override    public LifecycleRegistry getLifecycle() {        return lifecycleRegistry;    }}



代码运行结果,反复的按HOME键,然后再调出应用的输出结构:
Google I/O Android官方新体系架构之:Lifecycle_第1张图片

更多相关文章

  1. Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播
  2. Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命
  3. Android Studio 单刷《第一行代码》系列 01 —— 第一战 HelloWo
  4. Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础
  5. Android 系统概要 ——《第一行代码 Android》
  6. Android Studio 单刷《第一行代码》系列 04 —— Activity 相关
  7. Android 核心已经从 Linux kernel 代码库中删除
  8. Android 简单的代码混淆
  9. android opengl开发示例代码

随机推荐

  1. Android(安卓)windowSoftInputMode属性
  2. Android之路——第三个Android小程序(Andr
  3. Android事件机制:事件传递和消费
  4. Android定位功能实现
  5. 9、从头学Android之Button和ImageButton
  6. android测试工具MonkeyRunner--google官
  7. Android的uid与UserHandle
  8. VisionMobile:2015年Android使用的全球趋
  9. Qt on Android锛氬簲鐢ㄦ埅灞?/h1>
  10. Android应用程序的权限机制