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"?>
<RelativeLayout 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="zhangphil.test.MainActivity"><zhangphil.test.TestClassandroid:id="@+id/test_view"android:layout_width="match_parent"android:layout_height="match_parent" />
</RelativeLayout>

在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);@Overrideprotected 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);}@Overridepublic LifecycleRegistry getLifecycle() {return lifecycleRegistry;}
}

代码运行结果,反复的按HOME键,然后再调出应用的输出结构:

Google I/O Android官方新体系架构之:Lifecycle相关推荐

  1. Android 官方现代 App 架构解读 - 启程

    Android 官方 App 架构指南系列文章 Arch - 概述 Arch - UI Layer Arch - Domain Layer Arch - Data Layer Arch - 总结 面对 ...

  2. Android系统四层体系架构

    Android体系架构分为四层:应用层.应用框架层.库层.内核层.(盗用一张图) 一.应用层 应用层包括手机上的所有APP,无论是系统自带的还是用户开发的.他们都是基于第二层应用框架层开发的. 二.应 ...

  3. Google 2018年Android平台新政策,终于强硬了一回!

    1. 背景 从 Android 6.0 开始,Google 开始逐渐收紧 Android 平台的开放性,并在进一步提升应用的安全性.性能以及隐私保护方面做出了许多努力.这一点,从 Google 在之后 ...

  4. Android系统架构-----Android的系统体系架构

    一.Android的系统体系结构 Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framewor ...

  5. Android 官方架构组件 Navigation 使用详解

    前言 前段时间,我在做项目开发的时候对Fragment的管理遇到几个小问题,总觉得在现阶段封装好的Fragment管理器不太优雅.这成为我下决心学习Jetpack在很早之前推出的Navigation库 ...

  6. Android官方架构组件Paging:分页库的设计美学

    本文已授权 微信公众号 玉刚说 (@任玉刚)独家发布. 2019/12/24 补充 距本文发布时隔一年,笔者认为,本文不应该作为入门教程的第一篇博客,相反,读者真正想要理解 Paging 的使用,应该 ...

  7. 每一位Android开发者应该知道的Android体系架构和开发库

    Android的体系架构鼓励组件重用,允许开发者发布共享Activity.Service并且访问其他应用程序的数据,还可以根据开发者制定的安全限制进行管理.话虽如此,今天我将分享一些关于Android ...

  8. Android官方技术文档翻译——新构建系统概述

    本文译自Android官方技术文档<New Build System>,原文地址:http://tools.android.com/tech-docs/new-build-system. ...

  9. 如何将Android应用发布到Google Play(Android Market)官方市场

    作为一个专业的App开发者网站,竟然没有一篇讲述如何将Android App发布到Google Play的教程,这不允许出现,现在我们借力开发者的贡献将本文分享给更多的Android开发者. 相关教程 ...

最新文章

  1. Attention!注意力机制可解释吗?
  2. flask查询mysql数据展示_flask再学习-思考之怎么从数据库中查询数据在页面展示!...
  3. 个人成长:2021年中随想记
  4. leetcode150. 逆波兰表达式求值
  5. 清除java_如何在Java地毯下有效地清除问题
  6. Git 安装及 idea 配置 Git
  7. 基于Python+Django的图书馆管理系统
  8. 最新抗灾诗作:生死不离
  9. oracle 快照过旧怎么回退_我的世界20w45a:1.17首个快照!加入水晶、蜡烛、口袋、铜锭……...
  10. JavaScript数据类型之数字型(4)
  11. 智能优化算法:被囊群算法-附代码
  12. JavaScript将小写金额转换成大写
  13. windows10安装NVIDIA显卡驱动+cuda10.0教程
  14. Android开发 应用软件更新通用方式--强制/非强制/远程控制/浏览器 更新
  15. 滴滴WebApp实践经验分享
  16. 人工智能基础知识总结
  17. Andriod谷歌账号解锁功能
  18. autojs微博_autojs使用intent打开新浪微博的用户任务中心scheme的详细过程
  19. runnable、callable、consumer、supplier
  20. 计算机软件测试方法及应用实践论文,刍议计算机软件测试方法及应用实践原稿(全文完整版)...

热门文章

  1. Redis的5个常见使用场景
  2. Wine 6.1 正式版发布带来新变化
  3. formn 表单 table表格
  4. 计算机专业杭州申请公租房有,杭州公租房申请指南
  5. 路由器静态路由配置 两个路由通过serial连接
  6. html5 滤镜代码,canvas学习和滤镜实现代码
  7. 安信可A7模块GPRS功能测试及初步学习AT指令
  8. 图片处理——NDK实现人脸抠图
  9. 无刷电机换相-六步换向-两两导通与三三导通
  10. IDEA制作java项目UML图