移动开发

项目实训(一) 使用VSCode配置Flutter

本周(学期第四周)任务:1.简单学习Flutter,完成环境安装与配置2.探索Flutter与Unity集成方案 一、Flutter环境配置根据Flutter官方文档进行环境配置:开发 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter使用VS Code来安装Flutter

显示框架之app与SurfaceFlinger通信

SurfaceFlinger是android显示的核心进程,在整个显示框架中起到一个承上启下的作用,“承上”指的是与app进程间的通信,“启下”指的是与Composer进程的通信。Surfaceflinger本身不进行绘制,是app数据上屏的中枢通路,先来看下SurfaceFlinger在整个显示流程中的位置。 显示流程图.png 从显示流程图看可知,SurfaceFlinger位

Swift 中的幻象类型

前言 模糊的数据可以说是一般应用程序中最常见的错误和问题的来源之一。虽然 Swift 通过其强大的类型系统和完善的编译器帮助我们避免了许多含糊不清的来源——但只要我们无法在编译时保证某个数据总是符合我们的要求,就总是有风险,我们最终会处于含糊不清或不可预测的状态。 本周,让我们来看看一种技术,它可以让我们利用 Swift 的类型系统在编译时执行更多种类的数据验证——消除更多潜在的歧义来源,并帮助我

Android debug包运行正常,release包崩溃 解决办法

1. 添加配置调试release包,这样的抓取的log日志,这种方式可以知道具体错误,(无法精准到是哪一行) /在 AndroidManifest.xml 文件的 application 标签中 添加以下配置,即可在release包下的日志了/ android:debuggable="true" tools:ignore="HardcodedDebugMode" 2.debu

Android卡顿优化工具

线上监控的方案 1、BlockCanary 从Choregrapher中可以知道,帧的渲染是通过消息发送到主线程执行的。所以通过在计算msg的处理时间就可以判定是否发生卡顿。 Looper.java public static void loop() { ... for (;;) { ... // This must be in a local va

Android EditText更改软键盘enter键

单独设置 imeOptions 不生效,需加上行数限制与输入类型,原因不知 android:maxLines="1" android:inputType="text" android:imeOptions="actionSearch" 设置多行 分享一:android EditText 单行显示并且设置imeOptions很简单,条件是在xml中将singleLine设置为true, 将

iOS 底层原理39:Instruments系列(五)Leaks

iOS 底层原理 文章汇总 引言 iOS 5.0之后apple引入了Xcode编译器特性ARC(Automatic Reference Counting,自动引用计数)来帮助开发者管理内存,但为了追求app的高性能与减少安装包大小,工作中很多时候需要我们手动管理内存。再牛的开发者也不能保证自己写的code 100%没有内存泄露,出现内存泄露不可怕,可怕的是我们时间与精力花了大把,但内存泄露依旧

最全 ChromeDriver下载及谷歌浏览器,Win/Linux/Mac 全涵盖,老版本一网打尽,最新 136.0.7103.49 稳定版同步更新

前言        平时为了下个ChromeDriver驱动,到处找挺麻烦。在网上也发现了还有不少人在寻找老版本,做自动化的同学都知道,使用的Google浏览器和ChromeDriver驱动要版本匹配才能更好的运行。本人收集了包含Windows、Linux、Mac版本,分享给需要的人,仅供学习和交流.建议每一个搞自动化测试的同学

iOS动画 —— 自定义View

创建路径 1.使用CGContextRef创建,如CGContextAddArc 这种方式是直接对图形上下文进行操作,常用的方法有: 之前的讲解文章:# CGContextBeginPath //开始画路径 CGContextMoveToPoint //移动到某一点 CGContexAddLineToPoint //画直线 CGContexAddCurveToPoint /

Swift Protocol

- 用于通信 一个简单的例子: 比如你封装了一个View, 需要回调出去一个按钮事件 class TestView: UIView { // 注意这里要使用weak标记 weak var delegate: TestViewProtocol? fileprivate lazy var iEnterBtn: UIButton = { let btn