jetpack

JetPack之ViewModel最新源码详细分析

陌路散爱 提交于 2020-08-17 07:02:10
本文会基于最新版ViewModel使用方法与源码进行详细分析,从注册到实现ViewModel界面数据如何保存与管理全部涉及。 ** 简介: ** ViewModel 是JetPack系列库之一,它用来对组件的界面数据进行管理,且当组件的状态发生改变时数据依然留存。 优点:1.当所依赖组件的状态发生改变时,例如屏幕旋转等,界面数据不会发生改变 2.实现MVVM架构的基础,在日常开发中, ViewModel 就是MVVM架构的VM层,它相当于MVP架构的present,我们可以将业务逻辑以及数据交互的部分放入ViewModel中。 源码分析: 版本:viewmodel:1.1.1 此处使用的示例代码与livedata源码分析的相同,不影响流程分析 首先构造一个继承于 ViewModel 的类 接着创建一个 factory 实例传入 ViewModelProvider(this,factory ) 中去并调用 get 方法将我们的 ViewModel 作为参数传入。 此处需要注意的是在以前的版本中直接通过 ViewModelProviders.of(this).get() 方法来完成这个操作的。在最新的版本中已经取消了of方法,并且构造方法必须要传入2个参数 查看 ViewModelProvider 的构造方法可看出构造 ViewModelProvider 时必须传入2个参数才行

Android 开发技术周报 Issue#283

岁酱吖の 提交于 2020-08-12 04:54:16
新闻 Android 11特性调整:安装外部来源应用需要重启APP Google Messages beta版迎来一个新的搜索框 Android开发者生态永远比不上iOS?“联盟与公约”们正改变这一点 谷歌新款Android TV串流设备外形曝光:代号Sabrina Android 11 Beta引入诸多改进:3种图标形状 Pixel Launcher应用推荐 Android更新改进了“就寝时间”功能体验 Android 11电源键菜单将引入针对智能家居设备的快捷操作 教程 Android Studio 4.0+ 中新的 UI 层次结构调试工具 开源库 ParcelableHelper A simple AOP tool that helps Android developers quickly implement Parcelable interfaces toolargetool A tool to help you debug TransactionTooLargeExceptions on Android 7 SimpleMarkdown SimpleMarkdown is an Android app for editing Markdown! Android-Architecture-Components The template project that uses

Amazon Sagemaker 与 NVIDIA Jetson 平台结合打造智能边缘

北慕城南 提交于 2020-08-11 10:42:22
  随着物联网和AI芯片的发展,未来将会有越来越多的数据在边缘侧处理。很多业务场景已经对边缘智能提出了明确的需求,比如自动驾驶的汽车每天会产生5TB的数据,而智能工厂每天产生的数据高达1PB,其中包含视频和传感器的数据。如果不能借助边缘智能技术而依靠Internet网络把数据传输至云端处理,会造成网络延迟和拥塞,影响推理结果的实时性,造成生产事故甚至于安全事故。所以本篇将介绍使用Amazon SageMaker和Nvidia Jetson使用云+端结合的方式打造一个边缘推理的方案,整体方案架构如下:      在正式了解Amazon Sagemaker与NVIDIA Jetson平台之前,我们先了解一下什么是目标检测和YOLO。    目标检测与 YOLO(You Only Look Once)   目标检测是计算机视觉中的一个重要分支,但由于在边缘设备或移动端中部署神经网络模型需要很大的算力或GPU处理能力。近年来由于边缘AI芯片的算力增强,再加上边缘智能有着更广泛的应用场景,围绕机器学习模型在边缘设备上的高效应用等研究课题逐步火热。   目前在目标检测领域的深度学习方法主要分为两类:一类是 two stage的目标检测算法;另外一类是 one stage的目标检测算法。   前者是先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类;后者one

Jetpack DataBinding数据绑定

自闭症网瘾萝莉.ら 提交于 2020-08-10 02:12:56
Jetpack DataBinding数据绑定 简介 DataBinding是Google提供的将视图和数据绑定的支持库,主要是为了简化代码,去除findViewById() 等样式代码的调用,借助布局文件中的绑定组件,您可以移除 Activity 中的许多界面框架调用,使其维护起来更简单、方便。还可以提高应用性能,并且有助于防止内存泄漏以及避免发生 Null 指针异常。 依赖 在app的build.gradle文件中添加依赖: apply plugin: 'kotlin-kapt' android { ...... //开启dataBinding dataBinding { enabled = true } } dependencies { ...... //databinding版本跟Gradle版本一致 kapt "com.android.databinding:compiler:$gradle_version" } 项目的build.gradle配置如下: buildscript { ext.kotlin_version = '1.3.50' ext.gradle_version = '3.5.1' repositories { google() jcenter() } dependencies { classpath "com.android.tools.build

Android 11 开发者常见问题 | FAQ・第一期

孤街浪徒 提交于 2020-08-05 13:55:05
存储 01 Q: Android 11 的分区存储是强制的吗?如果 targetSdkVersion 低于 Android 10,运行在 Android 11 的手机上,分区存储特性还生效吗? 当应用的 targetSdkVersion 升级到 Android 11 时,分区存储特性会强制生效。但如果应用 targetSdkVersion 未升级到 Android 11,运行在 Android 11 系统上时,分区存储不会强制生效。但根据 Google Play 的政策,在每一个 Android 大版本发布之后的次年 8 月,所有新发布的应用 targetSdkVersion 都需要升级至该版本或更高版本,且在版本发布的次年 11 月,所有应用 targetSdkVersion 都需要升级至该版本或更高版本。 02 Q: 清理工具类应用如何帮助用户清理应用专属目录中的数据? MANAGE_EXTERNAL_STORAGE 权限一般适用于清理、文件管理、备份或恢复类型的应用,并且该权限会由 Google Play 来控制保护权限不会被滥用。清理类应用可以访问所有的外部存储,但同样也无法访问其他应用的专属目录。在分区存储中,应用的专属目录可以理解为和内部存储是等同的,在 Android 11 中也是不可以去访问的。如果清理类应用可以访问其他应用的专属目录,那么为了保护自己的数据

像写Flutter一样开发Android原生应用

喜你入骨 提交于 2020-07-29 08:51:35
要问到Flutter和Android原生App,在开发是有何区别,编程方式是绕不开的话题。Flutter采用声明式编程,Android原生开发则采用命令式编程。 声明式编程 VS. 命令式编程 我们首先要明确的,是何为声明式编程,何为命令式编程。 何为声明式编程 摘录一段来自百度百科的定义: 声明式编程通常被定义为除命令式以外的编程范式。同时存在一些其他的定义,这些定义不是简单的将声明式编程和命令式编程做对比,例如: 声明式编程是告诉计算机需要计算“什么”而不是“如何”去计算; 任何没有副作用的编程语言,或者更确切一点,任何引用透明的编程语言; 任何有严格计算逻辑的编程语言。 这些定义有一些是重合的。 简单地理解:声明式编程就是告诉“机器”你想要的是什么,让机器想出如何去做。 何为命令式编程 依旧先看它的定义(来自百度百科): 命令式编程(英语:Imperative programming),是一种描述计算机所需作出的行为的编程典范。几乎所有计算机的硬件工作都是命令式的;几乎所有计算机的硬件都是设计来运行机器码,使用命令式的风格来写的。 简单地理解:命令式编程就是需要我们命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。 举例说明 举个例子,看下面两种解决问题的方法: 方法一: 蔬菜.做成菜(蔬菜沙拉) 方法二: 洗干净(蔬菜) 混合

androidx viewpager2的使用详解

[亡魂溺海] 提交于 2020-07-28 22:29:35
在Android 中,像常用的控件:TextView \ EditText \ Button\ImageView\ViewPager\RadioGroup\RadioButton\Switch\CheckBox等等 这些大多数都是很有历史的控件了,我们接下来将一下一个全新的控件: ViewPager2 在没推出androidx之前,android生态有些混乱,自从Google官方开始重视这一问题以后 就有了后续的jetpack和一系列的控件 viewpager 我们一般是exends PageAdapter或者其他的适配器,完成不通类型之间页面滑动 A--->B---->C 默认会缓存2个页面的数据,有个缓存设计,也就是当前在B页面---C页面的数据会初始化,所以才有了懒加载(Fragment) 懒加载原理请移步---------> https://blog.csdn.net/qq_29769851/article/details/90712756 先看看ViewPager2的源码: 继承自ViewGroup setAdapter /** * <p>Set a new adapter to provide page views on demand.</p> * * <p>If you're planning to use {@link androidx.fragment.app

paging数据源的二次封装及我目前的认识

瘦欲@ 提交于 2020-07-27 23:15:55
说实话,pagging的数据源定义是在是太繁琐了,所以二次封装了下,没有任何侵入,干净利落,暂时先留存下来,或许在我的生命之中还能用到。。 package com.lk.care.respository import androidx.paging.DataSource import androidx.paging.PageKeyedDataSource import androidx.paging.PagedList import androidx.paging.RxPagedListBuilder import io.reactivex.schedulers.Schedulers /** * @author : william * @createDate : 2020/5/28 * * @description : */ abstract class PagingDataSourceFactory<K, V> : DataSource.Factory<K, V>() { val cacheList = arrayListOf<V>() override fun create() = createDataSource() abstract fun createDataSource(): PageKeyedDataSource<K, V> companion object {

Android JetPack组件-CameraX初探

六眼飞鱼酱① 提交于 2020-05-06 15:34:00
CameraX 又是一个 Google 推出的 JetPack 组件 ,是一个新鲜玩意儿,故给大家分享下我在项目中的使用过程心得。。 CameraX 是什么? Google 开发者文档 对 CameraX 的评价如下: CameraX是一个Jetpack支持库,旨在帮助您简化相机应用程序的开发工作。它提供一致且易于使用的API接口,适用于大多数Android设备,可以向后兼容至Android 5.0(API等级21)。 虽然它利用的是camera2的功能,但使用的是更为简单且基于用例的方法,该方法具有生命周期感知能力。它还解决了设备兼容性问题,因此您无需在代码库中包含设备专有代码。这些功能减少了将相机功能添加到应用时需要编写的代码量。 最后,通过CameraX,开发者只需两行代码即可利用与预安装的相机应用相同的相机体验和功能 CameraX扩展 是可选插件,通过该插件,您可以在 支持的设备 上向自己的应用中添加人像,HDR,夜间模式和美颜等效果。 本人的愚见:CameraX 是 Google 为了解决开发者们开发有关相机功能时遇到诸如适配等各种问题的一件称手的兵器。。 CameraX 入门 CameraX 还在测试alpha阶段,截至目前核心库最新的版本是 1.0.0-alpha05 ,估计Google未来会继续修复现有的bug和推出稳定版(我也不知道啥时候?)。 CameraX

Android_AndroidX简介&Junit4

好久不见. 提交于 2020-05-04 06:03:26
AndroidX简介: Android 9.0(API level 28)发布时, AndroidX也作为一个新的支持库 发布出来了。AndroidX时Jetpack的一部分,它包含了现有的支持库和最新的Jetpack组件。 AndroidX 与 Android 操作系统分开提供,并与各个 Android 版本向后兼容。 AndroidX 完全取代了支持库(android.support.v7或android.support.v4),不仅提供同等的功能,而且提供了新的库。所以对于使用AndroidX后,不需要因为使用v4还是v7库而烦恼了。 修改项目中的gradle.properties文件中将下面两个属性置为true就能完全使用AndroidX的库了。 android.useAndroidX :使用相应的 AndroidX 库,而非支持库 android.enableJetifier :重写其二进制文件,自动迁移现有的第三方库以使用 AndroidX 更多具体信息及如何使用请到android官网查看文档: https://developer.android.google.cn/jetpack/androidx Junit4: 这里简单记录分享下 背景:Android Studio中调试Room相关时碰到的问题(如 java.lang.ClassNotFoundException: