移动开发
Android卡顿监控
实现思路
卡顿监控主要监控:慢方法的监控、ANR的监控、掉帧的监控。其实现方案主要有三种:
Looper的Printer在消息执行前后的打印,计算出消息执行时间。
利用Choreographer向其注册CALL_BACK, 监听Vsync的开始从而得到上一帧的执行时间。
利用插桩的方法计算每个方法的执行时间。
比如对慢方法、ANR的监控,则是对主线程的Looper的消息的监听,对掉
Swift 高阶函数使用
Swift 高阶函数使用
map
map就是是对原对象所有元素进行一对一转换处理,中间不会跳过或遗漏,包括nil元素。
使用
let numList = [1,2,3]
// $0 就是 numList 里的元素
let res = numList.map{$0 + 1}
print("map res = \(res)")
返回
map res = [2, 3, 4]
传入方法
var map
一年时间过去了,LiveData真的被Flow代替了吗? LiveData会被废弃吗?
前言:在去年的这个时候,谷歌官方推荐使用 Flow 替代LiveData,一年时间过去了,我相信还是有很多android开发的朋友和我一样有以下几个问题:Android开发人员需要从 LiveData 迁移到 Kotlin Flows 吗?LiveData 现在是否已弃用?
🌟官方文档:
🌟推荐阅读:ht
Android Studio修改国内镜像
国内的Android开发者,基本每隔一段时间就会碰到项目突然不能编译的情况。sdk更新、插件安装也有诸多不便,环境的折腾确实伤透了脑筋。本文主要记录下使用host配置dl.google.com的国内镜像。
1. 用文本编辑器打开host文件
host文件所在路径为:
//对于Windows系统
C:\Windows\System32\drivers\etc\hosts
//对于Mac系统
/e
iOS 动态库和静态库
一、库
库是程序代码的集合,是程序开发者与其他开发者之间进行代码共享的一种方式。
库根据源代码公开的情况可以:
1.开源库
开源库的源代码可见,比如 AFNetworking。
2.闭源库
闭源库的源代码不可见,是一段编译好的二进制代码
闭源库有根据相对编译时和运行时:
静态库
动态库
二、静态库和动态库区别
1.格式上的区别
静态库的格式:
.a
.framework
动态库的格式:
UIStackView之一问一答
前言
此篇文章作为在使用UIStackView前的一些答疑,既是扫盲篇,也是实用篇。以下会讲述一些实用的案例,目的就是让更多的人拥抱UIStackView。同时欢迎小伙伴通过评论区讲讲使用StackView遇到的问题。
答疑
排列视图间距大小不一
问:排列视图间距大小不一,可以用UIStackView吗?
答:当然可以用,UIStackView虽然有space属性,但是适用于所有的排列视图,如果想
前端开发中常用的10个小技巧,助你写出高逼格代码
1. 有条件地向对象、数组添加属性
1) 向对象添加属性
可以使用展开运算符来有条件地向对象中添加属性:
const condition = true;
const person = {
id: 1,
name: "dby",
...(condition && { age: 12 }),
};
如果 condition 为 true ,则 { age: 16 }
SDWebImage5.11源码分析(二)
接上一篇文章继续分析SDWebImage5.11的缓存部分
SDImageCache
缓存获取数据,主要是通过key缓存(上一篇文章有说),cacheType判断缓存方式,options进行缓存拓展。主要内容如下:
a. 对cacheOptions类型进行筛选
b. 进入queryCacheOperationForKey方法,对具体缓存方式进行划分,其中包括内存缓存,磁盘缓存。然后又在各自缓
Swift面试题总结
1.convenience : 便利,使用convenience修饰的构造函数叫做便利构造函数
// 便利构造函数通常用在对系统的类进行构造函数的扩充时使用
便利构造函数的特点
1.便利构造函数通常都是写在extension里面
2.便利构造函数init前面需要加convericece
2.swift中Class和Struct的区别
struct SRectangle {
var wid