自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AMing_阿明

make a decision and keep on!

  • 博客(97)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android内存泄漏钉钉上报

“A small leak will sink a great ship.” - Benjamin Franklin“千里之堤,溃于蚁穴.” -《韩非子·喻老》如果 APP 就像一艘在海里航行的大船,内存泄漏就像大船下的小漏洞。当漏洞越来越多不去修复,船就可能沉没。APP 也可能因为内存泄漏越来越多造成内存溢出导致 APP 崩溃。我们不断的在做代码迭代,迭代的过程中代码难免会存在一些小问题。例如内存泄漏,我们也会去修复它。Android 排查内存泄漏的手段有很多,例如:1 Mat2 Andr.

2021-09-16 15:55:23 559

原创 Android自定义View仿新浪微博投票器

C 端 5.8.0 开发迭代的时候,产品需求中有个投票模块。其交互效果是模仿新浪微博的投票器,感觉挺有意思,动画效果也不错,便在需求拆分的时候认领了过来。2 难点分析认领后得着手赶紧去实现,因为这个自定义控件后续的业务需求等着用,观察了新浪的投票效果分析出如下难点:1 复合动画拆解动画得出一共存在三种动画组合在一起表达a : 投票文字的平移动画b: 投票数从无到有的透明度渐变动画c: 投票柱状图进度动画2 大 view 组合控制小 view假定投票器的选项可能为 N 种,这里需要做动态..

2021-09-16 15:38:25 458

原创 Android 键值对存储 SharedPreferencesManager

SharedPreferences 的介绍和特点:Android 提供的一个类似 Redis 的键值对的存储方式、叫 SharedPreferences 。不同于 Map 容器(内存存储)、 这个存储方式为文件存储,最终是存在 Android 文件系统的 xml 文件中。SharedPreferences 的特点:1 只支持基本数据类型 ,例如字符串、整形、布尔等2 不支持夸进程3 不适合存储大量数据、例如比较大的实体 json 。大量数据建议做 sql 数据库存储4 查询效率,虽然 Shar.

2021-09-16 15:34:48 767

原创 居理新房App底部导航我的重构思考

因为一些历史原因,项目中的 C 端底部导航相关代码已经不再适用现在的需求,一些不变的逻辑和业务无需耦合在一起,代码做很多 if else 判断。刚好此项优化也是团队下半年 OKR 之一。所以我花了一些时间思考和编写了一些代码,来做一些我理解的 “低耦合,高内聚” 的底部导航。我把他命名为 SmartNavigationLayout 。首先说一下我们不要什么:1 底部导航的十来个控件,我不想要他再在 MainActivity 去声明,然后在各种判断里面去做他们的选中和非选中状态处理。这部分应该内聚到 .

2021-09-16 15:29:31 103

原创 Appium 环境配置及初体验

Appium 我理解是一款可以支持 Android iOS 以及 移动混合、H5 等开发技术的移动端测试框架效果Gif执行 Python 脚本做一个简单的自动化操作慎入: 搭建环境 和 解决报错举步维艰。光安装的 Android sdk 、Java SDK 、adb、Nodejs 、brew、pip、npm 、Python 、appium 等相关的东西多达十几项官网 githubbrew

2018-04-08 11:28:19 10394

原创 Android列表滑动卡顿分析与优化

一 目标尝试解决首页 HomeFragment 在低端机型上滑动存在卡顿的问题。二 测试设备华为荣耀 9iAndroid 8.0内存 4GCPU 麒麟659三 数据采样刚进应用存在 MainActivity 的其他四个 fragment 的初始化、二楼的初始化。以及一些网络请求和弹窗弹出会,这些开销会加剧此时滑动首页列表的卡顿,采集数据应该进入首页后静置 10 sA 手动滑动体感:1 B3 滑动时存在明显卡顿2 刚刚进来时候滑动卡顿PS: B3运营位以下简称 B3B 工具采集:.

2021-09-17 10:00:44 2188

原创 Android百度地图测距功能

临近春节假期,业务开发进入收尾。空闲时间做的技术储备: 百度地图测距为什么做这个技术储备,1 年尾有时间 2 我们现有的地图业务基于百度地图 3 这个功能竞品某壳等没有但是很实用个人在看房时候经常需要这个功能发现各大房产 APP 没有上这个功能,需要自己切到百度地图再去找这个工具功能,这个功能成本不高一天时间实现了百度地图同样功能的 95% 功能。先上图:购房首要因素之一查询配套离自己小区离自己所处的楼栋多远:场景一: 楼栋到地铁的距离场景二: 楼栋到学校的距离场景三: 咨询师、经纪人给客.

2021-09-16 15:42:52 583

原创 Lottie 动效调研与实践

Lottie 概述https://airbnb.design/lottie/ Lottie 官网Lottie 是一个支持多端展示的动效库,相对于 OpenGL 、动画、GIF Lottie 有着他独有的一些优点和优势,例如对比原生动画 api 直接的就节省了开发很大程度上的编码工作量。只需要设计人员通过 AE 去到处他想要的效果即可,对比于 GIF GIF 相对效果差支持 8 位颜色,另外 Lottie 对于包体力增量也有很好的控制,非常值得我们去尝试和应用。下方链接列出了 Lottie 所支持的设

2021-09-16 15:22:20 377

原创 Android C端活动业务管理设计与思考

背景: C端以前遇到活动做得相对来说比较轻量,例如是在底部 tab 下发不同样式的 icon ,部分楼盘的标签更换图片。但是随着业务的发展,我们的活动会做得越来越重。从这次 6.4.8 单独做提报系统来管理活动我们就能看得出来。问题:但是实际上 API 和 客户端对活动的管理还是零散的、不同步的,举这次 6.4.8 的例子。1 首页搜索栏和 banner 背景的样式切换依赖 /common/v4/conf 接口2 底部 tab 活动样式变更依赖 theme-config 接口3 还.

2021-09-16 11:42:35 116

原创 Android高亮新手引导蒙层实现

市面上的 APP 大多都有这个功能,我们这次做的新手高亮引导蒙层有什么特殊之处呢?最基础的蒙层就是盖在页面的上方大概位置,不能精确定位。也不会随着 view 的变化蒙层的高亮区域和 tips 指示区域跟随底部 view 的位置变化而变化,也不能进行点击事件透传。一般都是点击蒙层后蒙层消失然后需要再次点击 view我们这次开发的蒙层具备哪些功能,和解决了哪些技术难点,和市面上大多数蒙层博客有什么异同呢。1 : 蒙层的高亮区域跟随底部目标 view ( 以下简称 targetView )我们的 AP..

2021-09-16 11:34:17 3351

原创 Android百度地图路径规划&关键字地理位置检索

先看看路径规划和地理位置检索的基本用法,地图的一些基本的引用和初始化此文不再赘述。1 路径规划请求请求路径规划包含很多种:例如,步行、公交、室内、跨城等等详情可参见OnGetRoutePlanResultListener 此次我们业务需求的是自驾和跨城公交两种,我们需要实例化一个RoutePlanSearch 实例化后将上文的路径规划的监听设置上routePlanSearch = RoutePlanSearch.newInstance();routePlanSearch.setOnGetRo.

2021-09-16 10:48:35 896 2

原创 Glide 加载大图与缓存策略研究

一概述Glide 的横空出世,在图片框架领域打败了一众强劲的对手。有老牌王者 ImageLoader ,也有新贵 Picasso 、Fresco。私以为 Picasso (毕加索) 的名字最有意境,奈何 Glide 武功更胜一筹,人们只记得谁第一个登上了月球,谁第一个踏上了南极点,自然而然 Glide 在 Android 图片框架占有率牢牢的坐上的第一宝座。虽然只是使用第三方,我们可以做得很没有深度 “with+load+into” 一下;也可以把 Glide 那么多的用法策略烂熟于胸能够实际解决业务.

2021-09-16 10:38:50 985

原创 利用 TextView 自定义 View

公司正在开发的项目中有很多这样需求的样式,例图如下:目前的做法是使用 textview 然后设置它的 background , 在 drawable 里面设置 xml 资源来指定 颜色 、圆角 、是否填充、边框线宽等。这样的做法没有问题,常规都是这样做,有点小不爽的是只要我的颜色、圆角角度或者其他参数有任意变化我都需要去新建一个 xml 资源文件,最后资源文件特别多写起来还有一定程度的费时力...

2019-07-23 16:25:25 371

原创 Java 注解

Java 注解是 Java 5.0 提供的一个基于反射实现的机制,很多框架例如依赖注入框架,Junit 测试框架等等都是使用了注解的方式来实现Java 已经内置了一些注解 例如 override suppresswarning 和注解的定义方式public @Interface MyAnnotition{}public @Interface MyAnnotition{String ...

2019-07-03 10:06:43 201

原创 Jenkins shell 工作自动化脚本

build kit and lib jar编译本地机器上的 Android 融云 SDK Jar 包 , 包含 Rong_IMKit.jar 和 Rong_IMLib.jar , 输出产物在本机 xx/localjenkins/output/cd /Users/zhouxuming/Documents/ReviewRongCloudSrc/android-workspacegit c...

2019-06-12 15:16:59 916

原创 Jenkins 环境搭建和打包初体验

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 ——来自百度百科个人理解 Jenkins 就是通过构建脚本使得一些重复劳动变得自动化 、可视化。解放生产力降低成本使用 Jenkins 构建自动化环境我认为需要懂的一些技术Linux & shellGroovy &...

2019-04-25 10:02:00 227

原创 Android 角标适配

角标是从 iOS 那边 copy 过来的一个功能,目前 Android 没有提供系统 API 对此做支持。如果需要适配这个功能需要遵循主流的 Android 手机厂商的适配规范,文章列举的 华为 三星 vivo  HTC 的适配方式。 一 判断机型if (Build.MANUFACTURER.equalsIgnoreCase("HUAWEI")) { // l...

2018-08-30 14:22:42 1317

转载 你真的了解volatile关键字吗?

一、Java内存模型想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的。Java内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,线程的工作内存中保存了被该线程所使用到的变量(这些变量是从主内存中拷贝而来)。线程对变量的所有操作(读取,赋值)都必须在工作内存中进行。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主...

2018-06-11 16:44:30 214

原创 Java 复习之多线程

线程的概念    一个进程可包含一个或多个线程  多进程的内部数据和状态是独立的  多线程是共享一块内存空间和一组系统资源有可能互相影响   线程切换比进程的负担小    程序启动就自动产生一个线程即主线程 main 方法就执行在主线程  *线程的生命周期一个线程从创建到消亡的过程 : 1 创建状态  new  2 : 可运行状态 start  3:不可运行状态 sleep wait IO阻塞  ...

2018-06-11 11:30:40 202

原创 c++ 常量、修饰符

菜鸟教程学习笔记 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。整数常量整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和...

2018-06-07 16:14:50 606

原创 C++ 变量

菜鸟教程学习笔记变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。extern使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),...

2018-06-07 11:36:43 179

原创 C++ 基本语法

菜鸟教程学习笔记:三字符组 三字符组就是用于表示另一个字符的三个字符序列,又称为三字符序列。三字符序列总是以两个问号开头。三字符序列不太常见,但 C++ 标准允许把某些字符指定为三字符序列。以前为了表示键盘上没有的字符,这是必不可少的一种方法。三字符序列可以出现在任何地方,包括字符串、字符序列、注释和预处理指令。三字符组替换??=#??/\??'^??([??)]??!|??<{??>...

2018-06-07 10:48:16 297

原创 c++ 之环境篇配置

c++ 开发环境基本需要文本编辑器 和 c++ 编译器,前者将编辑人类可读 c++ 源码,后者将源码转换成机器可读的一系列指令以我本地 mac 环境为例:文本编辑器: vim terminal 执行: vim - vc++ 编译器: GNUterminal 执行: g++ -v : g++ -vConfigured with: --prefix=/Library/Developer/Comman...

2018-05-29 15:43:41 428

原创 Android国际化之小语种自定义Farsi

老规矩 ,先上效果图图中分别展示了由应用内由中文切换到英文再到波斯语的展示。本篇博客介绍的两个点小语种的自定义应用内无感知切换语言一、小语种的自定义Java Locale 的语言常量基本囊括了主流语言: public static final Locale CANADA = null; public static final Locale CANADA_FRENCH = nul

2018-05-07 14:26:55 1339 2

原创 Appium popwindow 解决元素无法定位

问题脚本执行上图右上角 + 号的时候,应用会弹出 popwindow 。这可能是 uiautomator 的 bugdriver.find_element通过这类方法 find id name 等全部找不到元素会报错。脚本终止执行,遇到这个情况只能用 根据坐标去做点击如何获取元素精准坐标uiautomator viewerappium 提供的 inspectorandroid monito

2018-04-11 11:57:52 4021 4

原创 Appium 常见报错以及解决方式

记录一些个人在学习和使用 appium 中的常见报错以及解决方式,持续记录更新一Failure [INSTALL_FAILED_TEST_ONLY]脚本安装 apk 失败原因是待测的 apk 是 debug 包,换成 release 包即可。或者无法区分的时候可以直接用 adb install 命令如果也安装不上报 [INSTALL_FAILED_TEST_ONLY] 说明 apk 还是有问题。二

2018-04-10 10:03:11 4396

原创 Appium Inspector

Appium Inspector 对于测试的同学不得不说是一个神器,可以查询到我们需要定位的元素的 id 等各种信息 ,还可以 录制用户行为,翻译成脚本。逆天的是可以翻译成多种语言的脚本。这并不意味着测试的同学可以不用学习语言和编程了,因为机器翻译出的脚本一般很难一次执行成功,其中很可能还需要经过人工修改后才能顺利执行,但是这已经可以为测试脚本的编写带来很大的遍历,所以 Appium Inspect

2018-04-09 11:47:22 3047 2

原创 关于 Appium Android 真机测试

真机测试 和 模拟器测试没有太多区别desired_caps = { 'platformName': 'Android', 'deviceName': '192.168.56.101:5555', 'platformVersion': '4.4.4', 'app': '/Users/Documents/ReviewRongCloudSrc/android-worksp

2018-04-08 18:30:25 2834 1

原创 Python简单爬虫初体验

简单爬虫 : 1 不需要 cookie 访问 2 没有 ajax 的静态网页 3 没有加密爬虫架构爬虫调度端 uml 管理器 管理已抓取的 url 集合 和 待抓取的 url 集合网页下载器 网页解析器uml 管理器实现方式:内存实现 set() 集合 关系数据库 MySql urls(url,is_crawled)缓存数据库 redis set 网页下载器会讲 uml 网页下

2018-01-25 15:54:37 310

原创 Python 函数式编程

函数编程 != 函数式编程函数可以指向一个变量abs = lenads.(-5) 会异常 此时 abs 编程求集合元素个数的函数python把函数作为参数求 两个数的平方根之和import mathdef add(x, y, f): return f(x) + f(y)print add(25, 9, math.sqrt)python中map()函数def f(x): re

2018-01-25 14:20:50 296

原创 Python入门列表生成式

生成列表如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?循环 append 可以实现比较繁琐这个时候可以用到列表生成[x * x for x in range(1, 11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]列表生成式的 for 循环后面还可以加上 if 判断。例如: [x * x for x in range(1, 11)][1,

2018-01-13 14:40:38 290

原创 Python入门迭代

迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。 注意: 集合是指包含一组元素的数据结构,已经介绍的包括: 1. 有序集合:list,tuple,str和unicode; 2. 无序集合:set 3. 无序集合并且具有 key-value 对:dict迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者

2018-01-11 16:09:31 255

原创 Python入门list切片

切片取一个list的部分元素是非常常见的操作 L[0:3]['Adam', 'Lisa', 'Bart']L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。如果第一个索引是0,还可以省略: L[:3]['Adam', 'Lisa', 'Bart']也可以从索引1开始,取出2个元素出来: L[1:3]['Lisa', 'Bart']只用一个

2018-01-11 15:16:24 1468

原创 Python入门之函数

函数在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。我们以自定义一个求绝对值的 my_abs 函数为例:def my_abs(x): if x >= 0: return x else: return -x请注意,函数体内部的语句在执行

2018-01-11 14:22:08 239

原创 Python入门dict&set

dict花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}由于dict也是集合,len() 函数可以计算任意集合的大小:访问 dictd[key]可以使用 d[key] 的形式来查找对应的 value,这

2018-01-10 15:39:38 207

原创 Python入门if语句&循环语句if、while

if 语句缩进规则Python代码的缩进规则。具有相同缩进的代码被视为代码块,缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。score = 75if score >= 60: print 'passed'if-elsescore = 55if score >= 60: print 'passed'

2018-01-10 11:39:32 947

原创 Python中的list&tulpe

listlist 创建构造list非常简单,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据一个元素也没有的list,就是空lisempty_list = []按照索引访问 listL = [95.5,85,59]print L[0]print L[

2018-01-09 17:58:06 439

原创 Python 中的数据类型 & print 语句 & 注释&变量&字符串转义&布尔

Python 中的数据类型1 整数 Python可以处理任意大小的整数,当然包括负整数, 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。2 浮点数 浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^9和12.3x10^8是相

2018-01-09 16:01:40 1180

原创 使用Python脚本对 ndk crash 进行快速提取定位

Android 开发过程中,一些对效率要求很高的模块我们通常使用 c/c++ 来编写。他们比 Java 通过虚拟机再到机器上效率快很多,所以时常我们的应用当中一般又 Java 层代码 和 c/c++ 代码组成。即使自己不编写 c/c++ 代码,但是项目中难免引入一些第三方库 .so 文件间接使用到,常常这些 so 如果出现问题出现在 logcat 的崩溃栈,有一些类似于地址值的 log 如下:12

2017-12-19 16:21:31 593

原创 Android NDK 对 C/C++ crash 定位

通过 Java 层 logcat 日志的某个 例如:Fatal signal 8 (SIGFPE) at 0x0000513a 定位到 xxx.cpp 文件的具体错误位置、定位到产生错误的根源环境要求: ndk 环境 android-ndk-r14b 分析方式 1: ndk-stack 2: addr2line 3: objdumpndk 工具根据手机 cpu 架构有不同的调试工具 /U

2017-12-19 16:15:15 946

21.03 Android v4包

集成融云的时候 可能经常因为 v4 版本低的原因报错 大家在网上下的 可能又不知道版本是多少 这里给大家提供 21.03版本的 v4 感谢大家支持

2015-07-01

rongcloud1.0(本地版)

示例 viewpager + fragment 1.0 方式引用会话列表 数据库模拟好友列表 等 上传Demo 包为 压缩 rar mac 的朋友 请下载 rar解压软件 解压

2015-07-01

rongcloudDemo

此 Demo 基于 kit SDK 2.1.3 给大家示例了 ViewPager + fragment 环境配置 会话列表的引用 会话界面 用户头像 title 大家下载以后 把appkey 和 token 切换为自己的 其中 IMKIT 为依赖包 感谢大家支持融云

2015-06-30

空空如也

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

TA关注的人

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