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: 不是基于...
Flutter之四常用Widget
Flutter列表控件在 Flutter 中,ListView 可以沿一个方向(垂直或水平方向)来排列其所有子 Widget,常被用于需要展示一组连续视图元素的场景。ListView 构造方法: ListView:仅适用于列表中含有少量元素的场景 ListView.build:适用于子 Widget 比较多的场景 ListView.separated:适用于需要设置分割线的场景 构造方法名 特点 使用场景 ListView 一次性创建好所有子 Widget 适用于展示少量连续子 Widget 的场景。 ListView.build 提供了子 Widget 创建方法,仅在需要展示时才创建 适用于子 Widget 较多,且视觉效果呈现某种规律性的场景。 ListView.separated 提供了子 Widget 创建方法,仅在需要展示时才创建,且提供了自定义分割线的功能 适用于子 Widget 较多,且视觉效果呈现某种规律性、每个子 Widget 之间需要分割线的场景。 1.ListView可以通过设置 children 参数,将所有子 Widget...
使用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镜像,...
Flutter之二环境搭建及项目配置
一. 下载安装Flutter。1.1 下载安装包Flutter SDK 1.2 下载完成后进行解压: 1.3 配置环境变量。控制面板->系统和安全->系统->高级系统设置->环境变量->path->编辑->新建 1.4 安装flutter依赖并检查。cmd命令: 1flutter doctor 1.5 查看flutter版本。1flutter doctor -v 二. Android Studio安装配置。2.1 Android studio安装dart和flutter插件。 2.2 重启Android studio创建flutter工程。 三. VsCode配置。1. vscode添加flutter支持。 2. 创建一个flutter的项目。 3.使用模拟器调试。 四. 创建或者运行项目卡住问题创建项目一直卡在Creating Flutter Project没反应。运行项目一直卡在: 1Running Gradle task 'assembleDebug'... ...
Java常见的设计模式(上)
一. 常见的软件设计模式总体来说23种设计模式分为三大类: 创建型模式(5种)单例模式、建造者模式、工厂方法模式、抽象工厂模式、原型模式。 结构型模式(7种)适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11种)策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 二. 单例模式1. 单例模式的特点?确保一个类最多只有一个实例对象,并向整个系统提供这个实例。优点:由于单例模式只生成了一个实例,所以能够节约系统资源,减少性能开销,提高系统效率,同时也能够严格控制客户对它的访问。缺点:也正是因为系统中只有一个实例,这样就导致了单例类的职责过重,违背了“单一职责原则”,同时也没有抽象类,这样扩展起来有一定的困难。 2.单例模式的使用场景 整个程序的运行中只允许有一个类的实例。 需要频繁实例化然后销毁的对象。 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 方便资源相互通信的环境。 3....
Flutter之一Dart语言编程基础
一.Dart 简述在Dart中,一切都是对象,每个对象都是一个类的实例,所有对象都继承自Object。Dart是强类型的,也有自动推断类型的机制。 二.变量。1.变量的声明。Dart中定义变量有两种方式,一种是静态类型语言常用的方式,显式指定变量类型,另一种则是动态语言的常用方式,不指定类型,由vm自动推断。 变量的默认值:未初始化的变量的初始值为null。甚至具有数字类型的变量最初也是null,因为在Dart中没有基础的数据类型,所有的都是对象类型。 2. 显式指定类型来定义变量123456void main() { // 通过显式指定类型来定义变量 String name = "张三"; num age = 18; name = 1; //❌报错,显示指定的变量的类型是无法改变的} 3. 隐式推导变量.无需指定变量的数据类型,变量会根据值的类型进行推导,使用关键字var。 12345678void main()...
