Android弹窗BottomSheetDialog总结
圆角效果 先设置原有背景透明 style.xml 1234567<!--实现BottomSheetDialog圆角效果--><style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog"> <item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item></style><style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal"> <item...
Android数据库Room之二实体之间的关系
一.定义对象之间的关系由于 SQLite 是关系型数据库,因此您可以定义各个实体之间的关系。尽管大多数对象关系映射库都允许实体对象互相引用,但 Room 明确禁止这样做。如需了解此决策背后的技术原因,请参阅了解 Room 为何不允许对象引用。Room 的数据实体类跟数据库表是对应的,所以,有些表关系可以直接通过定义数据实体类之间的关系来实现,这样就可以无需编写 SQL 语句实现插入和查询过操作。 🐼两种可能的方法在 Room 中,您可以通过两种方式定义和查询实体之间的关系:使用具有嵌入式对象的中间数据类或具有多重映射返回值类型的关系型查询方法来建立关系。 🐻中间数据类在中间数据类方法中,您可以定义数据类,以便在 Room 实体之间建立关系。此数据类保存一个实体的实例与另一个实体的实例之间的对应方式(作为嵌入式对象)。然后,查询方法可以返回此数据类的实例,通过此数据类的实例我们就可以拿到对应实体的数据。 例如,您可以定义 UserBook 数据类来表示已借阅特定图书的图书馆用户,并定义一个查询方法用于从数据库中检索 UserBook...
Android数据库Room之一基础使用
一.Room简介Room是Google推出的数据库框架,是一个 ORM (Object Relational Mapping)对象关系映射数据库、其底层还是对SQLite的封装。 使用ORM可以让开发者更加关注业务逻辑,而不是SQL 语句。在JavaWeb领域也有类似的ORM 数据库框架Hibernate、MyBatis等等。 1.Android平台数据库框架在 Android 中常见的数据库框架: Greendao Realm DBFlow LitePal Jetpack-Room 🦝Greendao: 是 room 之前用得最广泛的 ORM 数据库框架,不过官方目前已经不再积极维护(官方在推新品 ObjectBox )在 ROOM,,出来以后据非官方数据统计多种场景下(插入、更新、删除),ROOM 性能上也只是和 greendao 不相上下,强得有限,毕竟底层都还是 Android 的 SQLite 只能通过包装层和生成语句去优化。Greendao的缺点是配置复杂,不支持监听数据表/Kotlin/协程等特性。🦁Realm: 不是基于...
使用Appuim+Python脚本实现Android应用自动化
一.引言众所周知在App应用开发时我们会有不同的服务器环境来进行开发调试,例如测试环境,预发布环境,正式服环境.由于环境众多所以在测试工程师反馈问题时总要不断的去登录不同的服务器环境进行验证和调试。流程如下: 打开应用 登录界面输入不同环境的账户密码 登录验证 通过这三部才能进入App中进行调试。这三部的过程的执行重复率非常高,作为程序与我们能不能通过程序简化人工的操作呢?笔者将在本文中通过分析和实践来实现这一功能。 二.Appuim的安装和配置对于Android手机屏幕的自动化控制有很多种方案。本文中将选择appuim来进行实现。 1.安装JDK环境和Android环境安装配置appuim首先需要配置好JDK环境和Android Sdk环境。这两点不必多说,网上面大把的相关教程。 2.安装appium环境下载appium-desktop文件,点击进行安装。 3.配置appium1。 安装好appium,打开程序,需要进行配置,host与port默认即可.2. 配置JDK环境和Android Sdk环境。填写Android_home及Java_home后,Save and...
Flutter开发基础总结
一.命令式UI和声明式UI1. 命令式编程和声明式编程的区别命令式编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。声明式编程:告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。 2. Flutter中命令式编程的应用在Flutter中每个组件,会有个build函数,这里会返回一个能够完整描述UI的对象结构。每当数据改变时,就重新调用build函数,返回新的结构。如何高效渲染,就是框架去做的事情了。通过这种方式,不管是UI的初始布局结构,还是后面的修改,都是build函数返回的对象结构去声明的,完整的声明式UI由此而来。所以Flutter是构建新的widget实例,而不是改变旧的实例。 二.Flutter中的WidgetFlutter 中Widget 是一切的基础,一切的显示都是 Widget,利用响应式模式进行渲染。在 Flutter 中自定义组件就是一个类,这个类需要继承 StatelessWidget\StatefulWidget。Widget 分为 有状态(StatefulWidget) 和...
Java多线程模型及线程安全问题总结
一.线程和进程1.什么是进程进程是系统中正在运行的一个程序,程序一旦运行就是进程。进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。 2.什么是线程线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。 3.进程和线程的区别与联系 线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 资源分配给进程,同一进程的所有线程共享该进程的所有资源。 虚拟机分给线程,即真正在虚拟机上运行的是线程。 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 二.Java线程的创建Java中线程的创建常见有如下三种基本形式: 1.继承Thread类,重写该类的run()方法1234567891011121314public class MyThread extends Thread { @Override ...
Java常见的设计模式(下)
一. 常见的软件设计模式接上一篇,我们说到面向对象设计模式总体来说23种设计模式分为三大类: 创建型模式(5种)单例模式、建造者模式、工厂方法模式、抽象工厂模式、原型模式。 结构型模式(7种)适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11种)策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 二. 适配器模式1. 概念将一个类的接口转换成客户希望的另外一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。例子:笔记本电脑电源一般用的都是5V电压,但是我们的家用电是220V,我们要让笔记本充上电,最好的办法应该是通过一个工具把220V的电压转换成5V,这个工具就是适配器。 2. 适配器模式涉及3个角色 目标 Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类,相当于插座。 适配器...
Dockerfile之ENTRYPOINT和CMD的异同
Dockerfile中CMD和ENTRYPOINT的区别在我们查阅Dockerfile的官方文档时, 有可能发现一些命令的功能重复(至少看起来干的事情差不多), 我已经在上文分析过ADD和COPY命令的区别(他们功能类似), 现在我们分析另外2个命令, 他们的功能也非常类似, 是CMD和ENTRYPOINT. 尽管ENTRYPOINT和CMD都是在docker image里执行一条命令, 但是他们有一些微妙的区别. 在绝大多数情况下, 你只要在这2者之间选择一个调用就可以. 但他们有更高级的应用, CMD和ENTRYPOINT组合起来使用, 完成更加丰富的功能. ENTRYPOINT还是CMD?从根本上说, ENTRYPOINT和CMD都是让用户指定一个可执行程序, 这个可执行程序在container启动后自动启动. 实际上, 如果你想让自己制作的镜像自动运行程序(不需要在docker run后面添加命令行指定运行的命令), 你必须在Dockerfile里面, 使用ENTRYPOINT或者CMD命令 比如执行运行一个没有调用ENTRYPOINT或者CMD的docker镜像,...
Java常见的设计模式(上)
一. 常见的软件设计模式总体来说23种设计模式分为三大类: 创建型模式(5种)单例模式、建造者模式、工厂方法模式、抽象工厂模式、原型模式。 结构型模式(7种)适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11种)策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 二. 单例模式1. 单例模式的特点?确保一个类最多只有一个实例对象,并向整个系统提供这个实例。优点:由于单例模式只生成了一个实例,所以能够节约系统资源,减少性能开销,提高系统效率,同时也能够严格控制客户对它的访问。缺点:也正是因为系统中只有一个实例,这样就导致了单例类的职责过重,违背了“单一职责原则”,同时也没有抽象类,这样扩展起来有一定的困难。 2.单例模式的使用场景 整个程序的运行中只允许有一个类的实例。 需要频繁实例化然后销毁的对象。 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 方便资源相互通信的环境。 3....
Android使用Gitlab实现CI及CD
Android 项目配置 gitlab-ci 持续集成这里只通过docker执行器来进行,如果使用shell也是可以的,不过需要自己写shell代码不如docker方便快捷。docker容器搭建Android打包环境一般有两种方式:一种是通过基于openjdk:8-jdk 写shell配置好打包环境进行打包处理,另外一种则是通过docker hub上面别人配置好的Android打包环境docker容器进行。 1.使用OpenJdk镜像自行打包环境做Gitlab-CI/CD12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#使用 openjdk镜像image: openjdk:8-jdk #定义Android版本变量variables: ANDROID_COMPILE_SDK: "28" ANDROID_BUILD_TOOLS: "28.0.2" ...