implementation “android.arch.lifecycle:viewmodel:

l

i

f

e

c

y

c

l

e

v

e

r

s

i

o

n

"

/

/

F

o

r

K

o

t

l

i

n

u

s

e

v

i

e

w

m

o

d

e

l

k

t

x

/

/

仅仅包含

L

i

v

e

D

a

t

a

i

m

p

l

e

m

e

n

t

a

t

i

o

n

"

a

n

d

r

o

i

d

.

a

r

c

h

.

l

i

f

e

c

y

c

l

e

:

l

i

v

e

d

a

t

a

:

lifecycle_version" // For Kotlin use viewmodel-ktx // 仅仅包含LiveData implementation "android.arch.lifecycle:livedata:

lifecyclev​ersion"//ForKotlinuseviewmodel−ktx//仅仅包含LiveDataimplementation"android.arch.lifecycle:livedata:lifecycle_version” // 仅仅包含Lifecycles implementation “android.arch.lifecycle:runtime:$lifecycle_version”

annotationProcessor “android.arch.lifecycle:compiler:

l

i

f

e

c

y

c

l

e

v

e

r

s

i

o

n

"

/

/

F

o

r

K

o

t

l

i

n

u

s

e

k

a

p

t

i

n

s

t

e

a

d

o

f

a

n

n

o

t

a

t

i

o

n

P

r

o

c

e

s

s

o

r

/

/

如果用

J

a

v

a

8

,

用于替代

c

o

m

p

i

l

e

r

i

m

p

l

e

m

e

n

t

a

t

i

o

n

"

a

n

d

r

o

i

d

.

a

r

c

h

.

l

i

f

e

c

y

c

l

e

:

c

o

m

m

o

n

j

a

v

a

8

:

lifecycle_version" // For Kotlin use kapt instead of annotationProcessor // 如果用Java8, 用于替代compiler implementation "android.arch.lifecycle:common-java8:

lifecyclev​ersion"//ForKotlinusekaptinsteadofannotationProcessor//如果用Java8,用于替代compilerimplementation"android.arch.lifecycle:common−java8:lifecycle_version”

// 可选,ReactiveStreams对LiveData的支持 implementation “android.arch.lifecycle:reactivestreams:$lifecycle_version”

// 可选,LiveData的测试 testImplementation “android.arch.core:core-testing:$lifecycle_version” }

实际上我们不需要全部把这些代码全写进build.gralde进去(当然全写进去也不会有什么错),因为Gradle默认是支持依赖传递的,不知道什么是依赖传递的看Android Gradle (二)签名配置和依赖管理这篇文章。 我们直接添加如下依赖就可以满足日常的工作,如果缺少哪个库,再去单独添加就好了。

添加这一句代码就依赖了如下的库。

2.2 Lifecycle基本用法

先不谈Activity和Fragment中如何使用,先举一个Lifecycle的简单例子。

public class MyObserver implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void connectListener() { … }

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void disconnectListener() { … } }

myLifecycleOwner.getLifecycle().addObserver(new MyObserver());//1

新建一个MyObserver类,它实现了LifecycleObserver接口,说明MyObserver成为了一个Lifecycle的观察者。 然后在注释1处将MyObserver添加到LifecycleOwner中。LifecycleOwner是一个接口,其内部只有一个方法getLifecycle(),getLifecycle方法用于获取Lifecycle,这样就可以将MyObserver添加到Lifecycle中,当Lifecycle的生命周期发生变化时,MyObserver就会观察到,或者说是感知到。

如果使用是Java8 ,那么可以使用DefaultLifecycleObserver来替代LifecycleObserver:

class MyObserver implements DefaultLifecycleObserver { @Override public void onCreate(LifecycleOwner owner) { … } }

除此之外,不要忘了在build.gradle添加 "androidx.lifecycle:common-java8:"

3.Lifecycle应用举例

应用举例准备两个示例,一个是在Activity中使用,一个是在第一小节的MVP例子上进行改进。

3.1 Activity中使用

package com.example.lifecycledemo1;

import android.arch.lifecycle.Lifecycle; import android.arch.lifecycle.LifecycleObserver; import android.arch.lifecycle.OnLifecycleEvent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log;

public class MainActivity extends AppCompatActivity {

private static final String TAG = “MainActivity”;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getLifecycle().addObserver(new MyObserver());//1 }

public class MyObserver implements LifecycleObserver{

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) void onResume(){ Log.d(TAG, “Lifecycle call onResume”); } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) void onPause(){ Log.d(TAG, “Lifecycle call onPause”); } }

@Override protected void onResume() { super.onResume(); Log.d(TAG, “onResume”); }

@Override protected void onPause() { super.onPause(); Log.d(TAG, “onPause”);

} }

先实现MyObserver,对ON_CREATE和ON_RESUME事件进行监听。因为在Android Support Library 26.1.0 及其之后的版本,Activity和Fragment已经默认实现了LifecycleOwner接口,所以在注释1处可以直接使用getLifecycle方法获取Lifecycle对象,这样MyObserver就可以观察MainActivity的生命周期变化了,LifecycleOwner可以理解为被观察者,MainActivity默认实现了LifecycleOwner接口,也就是说MainActivity是被观察者。 运行程序,打印的log如下所示。

D/MainActivity: onResume D/MainActivity: Lifecycle call onResume D/MainActivity: Lifecycle call onPause D/MainActivity: onPause

只要在MainActivity的onCreate方法中添加MyObserver,那么MyObserver就可以观察到MainActivity的各个生命周期的变化。

3.2 MVP中使用

改写第一小节MVP的例子,先实现MyPresenter,如下所示。

public class MyPresenter implements IPresenter { private static final String TAG = “test”;

@Override public void onResume() { Log.d(TAG, “Lifecycle call onResume”); }

@Override public void onPause() { Log.d(TAG, “Lifecycle call onPause”); } }

interface IPresenter extends LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) void onResume();

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) void onPause(); }

IPresenter接口继承自LifecycleObserver接口,MyPresenter又实现了IPresenter接口,这样MyPresenter成为了一个观察者。 接在在MainActivity中加入MyPresenter:

public class MainActivity extends AppCompatActivity {

private static final String TAG = “test”; private IPresenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPresenter = new MyPresenter(); getLifecycle().addObserver(mPresenter); }

@Override protected void onResume() { super.onResume(); Log.d(TAG, “onResume”); }

@Override protected void onPause() { super.onPause(); Log.d(TAG, “onPause”);

} }

MainActivity成为了被观察者,当它的生命周期发生变化时,MyPresenter就可以观察到,这样就不需要在MainActivity的多个生命周期方法中调用MyPresenter的方法了。 打印的日志如下:

D/test: onResume D/test: Lifecycle call onResume D/test: Lifecycle call onPause D/test: onPause

4.自定义LifecycleOwner

如果想实现自定义LifecycleOwner,可以使用LifecycleRegistry,它是Lifecycle的实现类。Android Support Library 26.1.0及其之后的版本,Activity和Fragment已经默认实现了LifecycleOwner接口,因此我们可以这么写:

import android.arch.lifecycle.Lifecycle; import android.arch.lifecycle.LifecycleRegistry; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle;

public class MyActivity extends AppCompatActivity { private LifecycleRegistry lifecycleRegistry;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

lifecycleRegistry = new LifecycleRegistry(this); lifecycleRegistry.markState(Lifecycle.State.CREATED); }

@Override public void onStart() { super.onStart(); lifecycleRegistry.markState(Lifecycle.State.STARTED); }

@NonNull @Override public Lifecycle getLifecycle() { return lifecycleRegistry;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)

总结

我最近从朋友那里收集到了2020-2021BAT 面试真题解析,内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题等等,可以很好地帮助大家深刻理解Android相关知识点的原理以及面试相关知识。

这份资料把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

这里也分享给广大面试同胞们,希望每位程序猿们都能面试成功~

Android 基础知识点

Java 基础知识点

Android 源码相关分析

常见的一些原理性问题

腾讯、字节跳动、阿里、百度等BAT大厂 2019-2020面试真题解析

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。