面试

Android应用开发岗 面试汇总-Jetpackp

2022-04-11  本文已影响0人  hahaoop

背景

最近在准备面试,结合之前的工作经验和近期在网上收集的一些面试资料,准备将Android开发岗位的知识点做一个系统的梳理,整理成一个系列:Android应用开发岗 面试汇总。本系列将分为以下几个大模块:
Java基础篇Java进阶篇常见设计模式
Android基础篇Android进阶篇性能优化
网络相关数据结构与算法
常用开源库、Kotlin、Jetpack

注1:以上文章将陆续更新,直到我找到满意的工作为止,有跳转链接的表示已发表的文章。
注2:该系列属于个人的总结和网上东拼西凑的结果,每个知识点的内容并不一定完整,有不正确的地方欢迎批评指正。
注3:部分摘抄较多的段落或有注明出处。如有侵权,请联系本人进行删除。

本节只对部分常见的组件库进行概述,较少使用或者不需要介绍的库在此忽略

1 Jetpack是什么

Jetpack 是一个丰富的组件库,它的组件库按类别分为 4 类,分别是架构(Architecture)、界面(UI)、行为(behavior)和基础(foundation)。每个组件都可以单独使用,也可以配合在一起使用。每个组件都给用户提供了一个标准,能够帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者能够集中精力编写重要的业务代码。


image.png

1.1 优势

1.2 Jetpack 与 AndroidX 的关系

链接

2 ViewModel

Android中的ViewModel是Android Jetpack组件库中的一个组件,在Android MVVM模式中被广泛使用。ViewModel的主要特性是以注重生命周期的方式存储和管理数据。这种特性体现在ViewModel与Android组件(Activity、Fragment和Service)的生命周期相绑定,在组件的生命周期中ViewModel的数据会一直保存在内存中,即便是在系统配置变更时也会存在(屏幕旋转、语言切换等)。

2.1生命周期:

image.png

2.2 实现原理

一句话总结:Activity的回调方法中实现了ViewModel的自动存取。

链接

2.3 ViewModel妙用:Activity与Fragment"通信"、Fragment与Fragment"通信"

有了ViewModel,Activity与Fragment可以共享一个ViewModel,因为Fragment是依附在Activity上的,在实例化ViewModel时将该Activity传入ViewModelProviders,它会给你一个该Activity已创建好了的ViewModel,这个Fragment可以方便的访问该ViewModel中的数据.在Activity中修改userModel数据后,该Fragment就能拿到更新后的数据.

public class MyFragment extends Fragment {
     public void onStart() {
        //这里拿到的ViewModel实例,其实是和Activity中创建的是一个实例
         UserModel userModel = ViewModelProviders.of(getActivity()).get(UserModel.class);
     }
 }

链接

3 LiveData

LiveData具有保证UI和状态一致、避免内存泄漏、避免手动管理生命周期等优点。可以将线程从子线程切换到UI线程。通过观察者模式,实现数据的订阅/发布框架。

3.1 使用

LiveData是一个在线程间传递数据的容器。当后台线程得到数据后,通过postValue()方法投递数据。其他线程通过getValue()得到数据。为了通知其他线程,LiveData采用的观察者模式。通过observe()方法,主线程可以在数据更新后立即得到通知。

3.2 实现原理

链接

4 Room

Room是Jetpack提供的SQLite ORM工具。Room中存取数据的方法都是阻塞的,要在后台执行,因此非常适合与LiveData配合使用。Room中定义的Dao可以返回LiveData,当SQLite查询返回后,对界面进行更新。

5 Lifecyle

Lifecycle是Android Architecture Components的成员,是一个生命周期感知组件,能够感知Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。正确的使用有助于更好地组织代码,减少内存泄漏,增强稳定。
链接

6 ViewBinding与DataBinding

6.1 ViewBinding 视图绑定

在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件自动生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
使用:

private ResultProfileBinding binding; //该类为编译器自动生成
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ResultProfileBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);

       binding.button.setOnClickListener(xxx);
    }

6.2 与DataBinding(数据绑定)的对比

视图绑定和数据绑定均会生成可用于直接引用视图的绑定类。但是,视图绑定旨在处理更简单的用例,与数据绑定相比,具有以下优势:

反过来,与数据绑定相比,视图绑定也具有以下限制:

考虑到这些因素,在某些情况下,最好在项目中同时使用视图绑定和数据绑定。您可以在需要高级功能的布局中使用数据绑定,而在不需要高级功能的布局中使用视图绑定。

上一篇 下一篇

猜你喜欢

热点阅读