自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 资源 (1)
  • 收藏
  • 关注

原创 CocoaPods安装及‘__rvm_make -j8‘处理

CocoaPods是一个用Ruby写的、负责管理iOS项目中第三方开源库的工具,CocoaPods能让我们集中的、统一管理第三方开源库,为我们节省设置和更新第三方开源库的时间。1.查看ruby版本ruby -v2.通过rvm来安装或升级Ruby,依次执行3.列出ruby可安装的版本信息显示结果,最新版本3.0.04.(提前安装)如果没安装的话,安装ruby时会自动下载安装Xcode、Command Line Tools for Xcode、Homebrew。5.安装3.0.0。

2024-01-01 11:45:07 907

原创 Android IdleHandler闲时加载

在之前的文章里,我们讲过关于handler的一些使用和原理。今天讲一个系统预留的一个handler,IdleHandler,有了它,可以让我们在系统闲时进行一些预加载或者事务处理。

2024-01-01 11:22:42 493

原创 Webview+AppbarLayout上下滑动冲突

当AppBarLayout和Webview共同使用时,会出现一个问题,AppBarLayout无法折叠了,Webview只能在较小的固定区域内上下滑动,可以理解为两者上下滑动冲突了。

2022-09-03 16:27:48 1305 1

原创 Webview+Viewpager左右滑动冲突

在开发场景中,经常需要Viewpager+Fragment嵌套滑动页面。然而若某个Fragment为webview,且webview中存在轮播图或者其他滑动控件,则会出现Webview内容无法左右滑动的问题。

2022-09-03 15:35:13 2014 2

原创 Android TextView显示不全问题

场景在写布局UI的时候,LinearLayout下水平方向有ImageView和Textview。ImageView固定尺寸,TextView设置了maxLines和ellipsize属性。运行发现,textview内容较多时,会有显示不全的问题。原因分析LinearLayout父容器下,左侧的ImageVIew控件设置了高度,xml默认情况下一行。此时图片控件高度较高,视图绘制时就固定了该父布局的高度。当页面加载数据时,文字超出一行,LinearLayout不会重新绘制把高度变大,所以

2021-06-24 11:59:01 5192

转载 Android进阶:RecyclerView中DiffUtil的使用

一、概述DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集-》新数据集的最小变化量。说到数据集,相信大家知道它是和谁相关的了,就是我的最爱,RecyclerView。就我使用的这几天来看,它最大的用处就是在RecyclerView刷新时,不再无脑mAdapter.notifyDataSetChanged()。以前无脑mAdapter.notifyDataSetChanged()有两个缺点:不会触发RecyclerView的动画(删除、新增、位移

2021-05-23 00:39:43 3599 1

原创 Android进阶:Protocol Buffer协议的使用

一、背景说起数据交互协议,相信大家最熟悉的就是xml和json了,尤其是json,广泛应用于web项目和移动端项目中。其实,还有一种协议,Protocol Buffer,简称Protobuf,得益于它的一些特性,越来越多的公司在开发中使用Protobuf代替json。二、简介1、概念Protobuf,在官网(https://developers.google.com/protocol-buffers)上的定义描述是:Protocol buffers are Google’s language-n

2021-05-22 14:09:32 1177 2

原创 设计模式:装饰器模式

一、概述装饰器模式(Decorator Pattern),从分类上讲,属于结构型模式。它是作为现有的类的一个包装。该模式允许动态地给一个对象添加一些额外的职责。同时又不改变其原有结构。主要应用场景:一般,我们使用继承方式扩展一个类。然而随着扩展功能不断增多,子类会逐渐膨胀。而装饰器模式就是为了解决这个问题的。它抽离出核心功能和扩展功能。从而进行动态扩展而无需创建新的继承子类。二、UML图 抽象组件角色(Component): 定义可以动态添加任务的对象的接口 具体

2021-02-19 10:28:37 110

原创 Android TextView绘制之过程分析

整体流程onMeasure -> onLayout -> onDrawonMeasureprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int width.

2020-12-31 17:01:27 969

原创 Android TextView绘制之DynamicLayout

DynamicLayout官网中,DynamicLayout描述如下DynamicLayout is a text layout that updates itself as the text is edited.This is used by widgets to control text layout. You should not need to use this class directly unless you are implementing your own widget or cus

2020-12-30 16:43:24 1459

原创 Android TextView绘制之StaticLayout

StaticLayout官网中,StaticLayout的描述如下:StaticLayout is a Layout for text that will not be edited after it is laid out. Use DynamicLayout for text that may change.This is used by widgets to control text layout. You should not need to use this class directly

2020-12-26 10:27:18 1315

原创 Android 报错处理:ActivityNotFoundException: No Activity found to handle Intent

场景在跳转外部浏览器的时候val uri: Uri = Uri.parse(url)val intent = Intent(Intent.ACTION_VIEW, uri)activity.startActivity(intent)发现部分机型有时会闪退,报错 ActivityNotFoundException: No Activity found to handle Intent可能原因外部没有可以处理该intent的组件。可能是外部浏览器初始化的问题。因为在出现闪退几次之后在进行调用,发

2020-12-24 21:14:13 4004

原创 Android TextView绘制之BoringLayout

前言在Android开发中,TextView是一个很基础的控件。但看过它的源码你就会发现他其实一点都不简单。毕竟他也是不少view的父类。其中包含了很多布局、逻辑和计算。之前一直想有空就研究一下来着的。那么现在就开始吧。这篇先讲TextView中三大布局(BoringLayout、StaticLayout、DynamicLayout)中最简单的BoringLayout。BoringLayout在官网中,BoringLayout的描述如下:A BoringLayout is a very simp

2020-12-23 20:40:42 1012

原创 Android:富文本中ReplacementSpan绘制隐藏bug

概述近日碰到一个有趣的bug。具体情况是:通过HTML.fromHtml的方式给TextView设置富文本内容。通过TagHandler.handleTag方法,处理自定义标签。在文本中插入一个自定义ReplacementSpan。然而,当我的自定义span的宽度变化时,存在一个临界值,会使得该自定义ReplacementSpan有时绘制不出来。(正常应该如第二个图所示)原因我在tagHandler中使用了空格占位,替换自定义spanoutput.append(" ");output.se

2020-12-20 13:35:07 707

原创 Gradle学习:Groovy基本使用

一、概述Groovy是一种动态语言。它和Java一样,也运行于Java虚拟机中。它基于Java并扩展了Java。动态语言,是指运行时才确定数据类型的语言,变量在使用之前无需申明类型。例如JavaScript、Python。相对的,编译时变量的数据类型就可以确定的语言为静态语言,例如Java、C++。它是一种面向对象的语言,同时也能作为一种纯粹的脚本语言。Groovy内部会把代码编译为Java class文件然后启动虚拟机来执行(实际上,由于Groovy Code在真正执行的时候已经变成了

2020-12-14 20:22:33 468

原创 H5:MathJax解析数学公式

一、概述MathJax是一款开源的JavaScript显示引擎,适用所有现代浏览器,使用MathJax可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax可以解析Latex、MathML和ASCIIMathML的标记语言。MathJax官网:MathJax官网Github地址:MathJax Github中文文档地址:MathJax中文文档英文文档地址:MathJax英文文档MathJax语法:MathJax语法二、安装1、引入MathJax使用网络字体(大部分浏览器都

2020-11-09 14:51:25 2595

原创 设计模式:责任链模式

一、概述责任链模式,从分类上讲,是23种设计模式中的一种行为设计模式。责任链模式(Chain of Responsibility Pattern),顾名思义,为请求创建了一个接收者对象的链,对请求的发送者和接收者进行解耦,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。使用场景:在处理消息的时候需要多级过滤或处理。举个栗子,OA请假申请,各级领导审批权限和次序是不同的,请求就在链条上传递,直到审批处理。二、UML图三、..

2020-11-06 17:34:08 124

原创 设计模式:策略模式

一、概述策略模式,从分类上讲,是23种设计模式中的一种行为设计模式。策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。主要解决在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。举个栗子,出行方式有多种,我们可以根据距离选择飞机、高铁、汽车等不同的出行策略。二、UML图Context是上下文,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用;Strategy是策略类,用于定义所有支持算

2020-11-03 11:08:00 86

原创 Android framework(四):应用程序启动过程

概述1、几个重要类Instrumentation:监控应用程序和系统的交互。ActivityManagerService:组件管理调度中心。ActivityStarter:Activity启动控制器,处理Intent与Flag对Activity启动的影响,具体说来有:1 寻找符合启动条件的Activity,如果有多个,让用户选择;2 校验启动参数的合法性;3 返回int参数,代表Activity是否启动成功。ActivityStackSupervisor:Activity启动和调度的核心类,主要管

2020-10-16 19:33:05 367

原创 Android:软键盘

软键盘显示1、WindowSoftInputMode九种状态(6+3)(控制软键盘显示还是隐藏)stateUnspecified:默认状态。不指定软键盘显示还是隐藏,将由系统选择合适的状态。stateUnchanged:保留状态。当前界面的软键盘状态,取决于上一个界面的软键盘状态。stateHidden:隐藏状态。向前导航到当前页面时隐藏软键盘。stateVisible:显示软键盘。向前导航到当前页面时显示软键盘。上个页面返回时不显示。stateAlwaysHidden:始终隐藏软键盘 。向前

2020-10-12 20:17:06 704 1

原创 Kotlin: Coroutines协程学习笔记(二)

设置超时通过withTimeoutOrNull设置协程的超时时长,如果超时将会返回 nullval result = withTimeoutOrNull(1300L) { repeat(1000) { i -> println("I'm sleeping $i ...") delay(500L) } "Done" // 在它运行得到结果之前取消它}println("Result is $result")运行结果:I'm sl

2020-09-17 10:10:35 255

原创 Kotlin: Coroutines协程学习笔记(一)

一、什么是协程协程是一种协作式的计算机程序并发调度的实现,程序可以主动挂起或者恢复执行,本质上,协程是轻量级的线程。二、协程和线程的关系和区别1、协程是协作式的,线程是抢占式的。协程是由程序来控制什么时候进行切换的,而线程是有操作系统来决定线程之间的切换的。2、一个线程可以包含多个协程。但是有一点必须明确的是,一个线程的多个协程的运行是串行的。3、和多线程比,协程没有线程切换的开销,执行效率更高,性能更具优势。因而协程适合io密集型的程序,多线程适合计算密集型的程序(适用于多核cpu的情

2020-09-02 20:45:11 220

原创 Android framework(三):SystemServer进程

一、概述SystemServer是Android系统的核心之一,大部分Android提供的服务都运行在这个进程里,SystemServer中运行的服务总共有60多种。为了防止应用进程对系统造成破坏,Android的应用进程没有权限直接访问设备的底层资源,只能通过SystemService中的代理访问。通过Binder,用户进程在使用SystemService中的服务并没有太多不便变之处。上一节已经讲到ZygoteInit的启动,那么ZygoteInit是如何启动SystemServer的呢二、fork

2020-08-01 15:44:00 4190

原创 H5:border-radius移动端的兼容问题

问题场景通过以下方式实现一个圆形边框的选项值.option { width: 40px; height: 40px; border-radius: 50%; text-align: center; line-height: 40px; font-size: 36px; color: #888888; border: 2px solid #888888;}在chrome和其他浏览器上一直显示正常。在个别移动端机子上,出现圆圈不圆和

2020-08-01 11:26:26 1017

原创 Android framework(二):Zygote进程

一、概述zygote,在英语中是受精卵的意思。而在Android系统中也有这么一个“受精卵进程” – Zygote进程。在Android系统中,Zygote进程是所有Android进程的父进程。它通过fork的形式,创建SystemServer进程和应用程序进程。而Zygote进程则是通过linux系统的init进程启动的。在Android系统中各种进程的启动过程:init进程 ––> Zygote进程 ––> SystemServer进程 ––>各种应用进程其中,应用程序进程

2020-06-30 20:53:35 437

原创 H5:救命技能之Webstorm恢复被删文件

今天,整理代码的时候操作不慎,多删除了项目文件,因为文件大,连回收站也清空了,想起来有部分代码未提交欲哭无泪!重写是不想重写的,于是试了几个数据恢复软件,免费版专业版都用上了,发现还没恢复成功.......想起来,Webstorm还有本地记录,于是抱着试试的心态(大不了重写),幸好恢复了。这里衷心感谢Webstorm!!简直救命!恢复步骤1、工程项目,右键打开 local history2、左边选择最近的一条本地记录,点击,右边选择误删想恢复的目录或文件,点击Revert .

2020-06-15 20:35:22 876

原创 H5:html2canvas使用笔记

场景描述:在H5页面需要生成截图,用于分享给其他用户。可以通过开源库html2canvas实现这一功能。官方文档github -> https://github.com/niklasvh/html2canvas使用文档 -> http://html2canvas.hertzen.com/documentation安装//这里最好指定安装版本,原因见下文npm i [email protected]使用import html2can...

2020-06-05 16:12:47 7098

转载 手机屏幕尺寸大全

在进行前端页面开发时,有时候需要根据手机进行适配,为避免每次查找麻烦,贴一个手机屏幕尺寸大全,数据来源:优设网-屏幕尺寸大全iPhone 11 Pro iOS 5.8 458 19 : 9 375 x 812 1125 x 2436 3.0xxhdpi iPhone 11 Pro Max iOS 6.5 458 19 : 9 414 x 896 1242 x 2688 3.0xxhdpi iPhone 1..

2020-06-01 11:36:58 2989

原创 Android framework(一): 系统架构及源码

虽然实际开发工作经常偏业务和应用层,但作为一个有追求的程序猿,对于技术还是要保留好奇和深入了解的习惯的。年轻就要多学习!不仅要知其然,还要知其所以然。故趁闲暇,博览大家,研究一下frameworks相关知识,提升自己。Android四层架构从高到低分别是应用层、框架层、运行库层、Linux内核层。Android的本质是在标准的Linux系统上增加了Java虚拟机Dalvik/ART,并在Dalvik/ART虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基

2020-05-27 21:28:40 711

原创 H5:微信分享接入及避坑记录

前言项目中经常有这样的需求,某个页面需要分享到微信好友或朋友圈。在app中,可以通过接入sdk,调用sdk的方法实现分享。在H5中实现微信分享也是需要借助sdk。微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力。不过在接入微信js-sdk之前,类似app注册应用账号一样,需要做些前置的准备工作。此处贴一.

2020-05-23 17:34:07 2113

原创 H5:echarts环形图避坑记录

概述在开发过程,经常会有需要展示各种图表数据的场景和需求。说到数据可视化方面,就不得不提到Echarts了。Echarts是一个强大的商业级别数据图表工具。它是一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等)。可以为前端开发提供多种类、直观、生动、可交互、可高度定制化的数据可视化图表。官方文档官方示例:https://echarts.apache.org/examp..

2020-05-23 10:53:51 659

原创 Linux学习笔记:线上服务器安装Mysql

安装前Centos7将默认数据库mysql替换成了Mariadb。手动删除的话,可以先卸载Mariadb再操作后续步骤rpm -qa|grep mariadb //查询出已安装的mariadbrpm -e --nodeps 文件名 //一一卸载当然,也可以跳过以上操作,直接安装MySQL的话,会覆盖掉这个数据库。安装前检查# 查看系统是否安装了mysql软件r...

2020-04-18 23:09:16 216

原创 Linux学习笔记1:基本权限和软件安装

基本权限1、-rw-r--r---文件类型(-文件,d目录,|软链接文件)剩下9位,3位一组,分别代表:u所有者、g所属组、o其他人 的权限r读,w写,x执行2、chmod命令格式:chmod [选项] 模式 文件名说明:选项一般为R,递归,可缺省权限可以用数字表示,r--4,w--2 x--1,例如rwxr-xr-x,三位一组,可以用数字表示为75...

2020-04-07 00:35:08 206

原创 H5:微信分享页面缓存严重的解决方案

问题场景通过微信分享一个H5页面给用户,分享时页面参数拼接在url中。页面参数不同,页面内容不同。由于微信自带浏览器会缓存页面,当页面打开次数多了,会发现分享的B参数的页面,打开后仍是之前的A参数页面。在微信开放社区上查找一番,发现有些人也碰到类似问题,故综合网上及实际开发,总结了以下几个方案。解决方案1、手动清缓存android清除缓存方式:打开http://deb...

2020-03-12 10:01:02 7951

原创 Nginx访问本地项目及配置

场景在H5开发中,有时候有些问题只在线上环境出现,线上环境又不能随便更改代码和配置,比如,我们需要对页面进行重定向,正则匹配转发,那么我们能不能在本地调试就能模拟线上环境页面访问情况呢?答案是肯定的!那么如何做呢?模拟线上环境页面访问1、nginx线上环境使用的是nginx服务器。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服...

2020-03-05 17:38:06 9107

原创 H5 Hybrid性能优化方案

在混合开发中,我们经常需要H5开发一些活动页面或内嵌的H5页面。当页面比较重,或网络较差时,经常出现加载缓慢,对客户体验不好。那么如果改善这个问题呢?先看一下webview加载流程,webview加载通常可以分为以下几个过程:### Webview加载流程大致可以分为以下几个阶段:1、Webview初始化2、下载和解析Html/js/css3、和app交互(不一定有)4...

2020-03-02 19:23:14 1684

原创 Vue:滚动页面到指定位置实现(避坑)

在Vue中,有三种方式可以实现H5页面滑动至指定位置方法1://先获取目标位置距离mounted() { this.$nextTick(() => { setTimeout(() => { let targetbox= document.getElementById('targetbox'); this.target= targ...

2020-02-25 19:24:09 39537

原创 H5:消除div里面img的缝隙

当我们将img标签放于div中,仔细查看会发现img底部和div底部有一道很小的缝隙。那么如何解决这个问题呢?三种方式:1、定义容器里的字体大小为02、图片img标签display:block3、定义图片img标签vertical-align:bottom或vertical-align:middle或vertical-align:top原因: ...

2020-02-21 17:44:47 480 1

转载 H5:vue-awesome-swiper官方说明文档

https://www.swiper.com.cn/api/start/new.html

2020-02-17 14:46:43 16397 1

原创 H5:解决Vue在IOS13上页面回退不会刷新的问题

场景描述vue搭建的多页面应用项目,使用go(-1)回退至前个页面。正常的话,回退后会刷新前个页面,各个生命周期钩子函数触发。然而,在Android和ios13以下是正常的,到了ios13就不行了。解决方案由于项目为多页面应用,无法通过Vuex状态状态解决该问题,因为多页面应用创建了多个vue实例。同理,尝试了storage监听、evenbus也无法解决。问题原因...

2020-02-14 14:09:31 2472

httpclient API文档

httpclient API文档

2016-08-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除