- 博客(149)
- 资源 (1)
- 收藏
- 关注
原创 接口集线器,将多个模块功能进行合并,方便调用
接口集线器package com.company;import com.company.inter.HubA;import com.company.inter.HubB;public class Test { public static void main(String[] args) { Hub hub =new HubImple(new HubAImple(),new HubBImple()); hub.hub(); hub.hubA
2020-12-11 22:47:01
375
原创 Bean转换器工具类
Bean转换器工具类给两个Bean相互转换,一般喜欢写一个Util工具类,但是使用起来贼不方便,不如用这个转换器类,可以把转换工作放在一起,而且还好管理,便于别人查看和使用package com.company;public abstract class TransformBean<T,K> { public TransformBean() { } public abstract K transorm(T t,K k); public abstrac
2020-12-11 22:00:52
413
原创 AndroidStudio日常使用问题汇总
1.The emulator process for AVD Nexus_5_API_24 was killed. 【模拟器启动报错】参考连接:https://jingyan.baidu.com/article/a17d5285d11f3c8098c8f2c9.html
2020-11-18 15:29:36
242
原创 eeui 2.4.0 升级之后 Execution failed for task ‘:weex_sdk:unzipJSC‘.
前言最近eeui社区有人反馈,android 11设备上无法正常运行。反馈没多久eeui官方开发者就给出了解决方案,那就是后续更新有开发自行编译打包weex sdk。升级版本到2.4.0运行出错:What went wrong:Execution failed for task ‘:weex_sdk:unzipJSC’.解决办法:1.我先在社区提出了这个问题,在提问题之前我看了以往的问题清单,貌似大家都没有遇到这个问题。所以想先提问一下,说不定就有人已经发现和解决了呢?(昨天晚上下班前体问的)
2020-11-17 16:09:57
893
1
原创 vue的Axios跨域问题,以及如何使用jquery实现dom解析(爬虫)
背景通过npm run dev。我们会把项目起在127.0.0.1下面。那么我们所有的请求的baseUrl默认都是这个。如果我们希望访问其他三方的网站,如果三方网站没有放开同源策略限制的话,我们将会遇到服务端跨域的问题。但是通常情况下我们遇到的都是浏览器的同源策略限制,如下图所示:那么如何来解决这个跨域的问题?我们可以通过webpack配置proxyTable来进行访问控制devServer: { host: '127.0.0.1', port: 8090, proxy:
2020-11-15 23:06:54
571
原创 gradle 配置apk重命名
小插曲领导反馈,让业务人员捋清楚版本号太复杂了,能不能把版本号加在文件名上面?前言相信打包这个活初级开发都接触过,androidStudio默认会帮我们把包打成debug,和release但是很多时候我们需要对这些包增加区分度。来方便我们的运维同学帮我们挂包,或者是产品同学帮我们上架不同渠道区分度比如我们会加上应用名,版本号,渠道,时间戳,最后是我们默认的打包类型具体实现//这个要写在android节点外面def releaseTime() { return new Date().fo
2020-11-13 10:23:52
496
原创 自建APM之网络优化
网络优化纬度介绍正确认识:网络优化纬度:多维仅仅重视流量不够网络流量的消耗:精确整体均值掩盖单点问题网络相关监控:全面粗粒度监控不能帮助我们发现、解决深层次的问题纬度流量消耗一段时间流量消耗的精准度量,网络类型、前台后台监控相关:用户流量消耗均值、异常率(消耗多、次数多)完整链路全部监控(Request、Response),主动上报网络请求质量用户体验:请求速度、成功率监控相关:请求时长、业务成功率、失败率、Top失败接口其它公司成本:带宽、服务器数、CDN手机耗电
2020-11-11 18:14:02
250
原创 自建APM线程管理
线程调度原理剖析线程调度原理任意时刻,只有一个线程占用CPU,处于运行状态多线程并发:轮流获取CPU使用权JVM负责线程调度:按照特定机制分配CPU使用权线程调度模型分时调度模型:轮流获取、均分CPU时间抢占式调度模型:优先级高的获取,JVM采用android线程调度nice值- process中定义- 值越小,优先级越高- 默认是THREAD_PRIORITY_DEFAULT,0cgroup更严格的群组调度策略保证前台线程可以获取到更多的cpu注意点线程过多导致CPU频繁
2020-11-11 12:45:51
277
1
原创 自建AMP之内存优化
内存优化介绍及工具选择目录内存优化介绍优化工具选择背景介绍内存是大问题但缺乏关注压死骆驼的最后一根稻草内存问题内存抖动:锯齿状、GC导致卡顿内存泄漏:可用内存减少、频繁GC内存溢出:OOM、程序异常工具选择Memory Profiler实时图表展示应用内存使用量识别内存泄漏、抖动等提供捕获堆转储、强制GC以及跟踪内存分配的能力方便直观线下平时使用...
2020-11-10 18:08:13
233
原创 自建APM之卡顿优化
卡顿介绍及优化工具选择CPU ProfilerSystraceStrictMode背景介绍很多性能问题不易被发现,但是卡顿很容易被直观感受卡顿问题难以定位卡顿问题难在哪里产生原因错综复杂:代码、内存、绘制、IO?不易复现:当时场景强相关CPU Profiler图形展示执行时间、调用栈信息全面,包含所有线程运行时开销严重,整体都会变慢(带偏优化方向)TraceView和SystraceStrictMode严苛模式,Android提供的一种运行时检测机制方便强大,容易被忽略包
2020-11-10 16:39:57
389
原创 自建APM之布局优化
绘制原理Cpu负责计算显示内容Gpu负责栅格化(UI元素绘制到屏幕上)16ms发出VSync信号触发UI渲染大多数Android设备屏幕刷新频率:60Hz优化工具Systrace关注Frames正常:绿色圆点,丢帧:黄色或红色alerts栏LayoutInsepector层次结构screenShotPropertiesTableChoreographer获取FPS,线上使用,具备实时性Api16之后Choreographer.getInstance().postFrame
2020-11-10 08:45:44
242
原创 自建APM之启动优化
优化背景8秒定律,打开一个网页加载的时间超过八秒。会有70%的用户流失现状分析启动时间测量adb方式测量adb shell am start -W -n 应用包名/Activity全路径名这个命令在不同手机下的输出不一样vivo X9iMI 8这种方式简单,适合我们线下使用。但是这种方式误差比较大。需要测量多次然后取平均值这里解释一下thisTime 打开当前页面耗时totalTime 打开所有页面耗时waitTime 冷启动简单讲app冷启动可以分为两个阶段第一阶
2020-11-09 18:56:27
343
原创 异步优化方案
异步优化详解创建线程,创建线程池Executors.newFixedThreadPool()//设置线程数量,参考AsyncTask问题1.任务必须执行在主线程当中(不符合异步要求)解决办法:把任务改造成可以在子线程中执行,或者把任务放到主线程执行问题2.异步任务结束时间晚于调用时机(需要在某个阶段完成)解决办法:使用java的CountDownLatch锁问题3:CPU密集型任务,IO密集型任务异步优化痛点1.代码不够优雅2.场景不好处理(依赖关系)3.维护成本高启动器流程代码
2020-11-09 18:39:57
357
原创 MAT工具介绍和使用
Hprof转换工具转换命令MAT可视化工具全面理解MAToverView1.Histogram 基于类分析 (直方图)列出class的实例,shallowsize,retainedsizegroupByPackageWith outGoing ReferenceWith incoming Reference2.Dominator_tree 基于实例分析3.OQL 对象查询语言4.Thread Overview 线程总数查看5.Top consumers
2020-11-09 17:43:58
1438
原创 Android知识体系图谱-常见机制(持续更新)
线程通信Handler远离HandlerThreadIntentServiceRxjava进程IPC通信BinderAIDL序列化匿名共享内存lowmemorykiller进程的优先级View体系自定义控件事件分发机制- 滑动冲突- 滑动、嵌套滑动自定义动画lottie动画解析绘制- measure- layout- draw requestLayout和invalidate()区别Android消息机制本地存储 Sqlite、SharePref
2020-11-01 21:45:37
351
原创 Android知识体系图谱-开发基础能力(持续更新)
java高级反射,动态代理反射介绍基础合集NIOIO垃圾回收和GCJVM 多线程(并发锁)并发集合框架容器数据结构和算法数据结构算法相关线性表栈和队列树树的基础其他常见的树并查集B-,B+,B*树图图的基础拓扑排序Kruskal算法Prim算法Dijkstra算法Floyd算法散列查找排序海量数据处理操作系统操作系统相关计算机网络网络相关DNS HTTP/1.x HTTPs/HTTP/2 TCP等网络知识SSL虚拟机虚拟
2020-11-01 20:56:57
286
原创 系统学习android自定义View
自定义view绘制基础添加链接描述自定义绘制概述自定义绘制的方式是重写绘制方法,其中最常用的是 onDraw()绘制的关键是 Canvas 的使用Canvas 的绘制类方法: drawXXX() (关键参数:Paint)Canvas 的辅助类方法:范围裁切和几何变换可以使用不同的绘制方法来控制遮盖关系自定义绘制四个级别1.Canvas 的 drawXXX() 系列方法及 Paint 最常见的使用2.Paint 的完全攻略3.文字的绘制4.Canvas 对绘制的辅助——范围裁切和几
2020-10-27 13:31:42
445
1
原创 Android日常开发(51)使用ViewFlipper轻松实现上下,左右滚动视图
前言实现上线翻滚的视图的办法有很多种,比如viewpager。今天我们要分享的是使用ViewFlipper实现这种效果。原理ViewFlipper的实现原理,是通过动画+广播代码讲解用到的类ViewFlipper,Animation <ViewFlipper android:id="@+id/viewFlipper" android:layout_width="match_parent" android:layout_height="wrap_content"
2020-09-25 16:57:18
752
原创 WEEX-EEUI 卡顿优化(图片加载)
前言前两天前端的小伙伴告诉我,他写的页面再android手机上特别的卡,崩溃了很多次。这让我紧张了起来,已经用weex-eeui做过一个项目了,之前还没发现这个问题。因为问题不好定位,让我想起了之前一直想用却没有怎么使用过的android profile工具。现在它可以排上用场了。Android Profile 工具使用这里先提供几个我觉得写的比较好的文章给大家:1.Android studio中android profile(性能分析器)的使用2.Android性能分析工具 — CPU Prof
2020-09-09 16:40:32
757
原创 Nginx日常 解决 413 Request Entity Too Large
一开始也是百度,看到说可以设置修改nginx.conf的值就可以解决了 将以下代码粘贴到nginx.conf内client_max_body_size 20M; 可以选择在http{ }中设置:client_max_body_size 20m;也可以选择在server{ }中设置:client_max_body_size 20m; 还可以选择在location{}中设置:client_max_body_size 20m; 三者有区别 设置到http{}内,控制全局nginx所有请求报文大小设置到
2020-09-09 14:25:13
238
原创 Vue 页面高度撑满屏幕
第一步:此时应该在App.vue文件style中添加如下代码:html,body,#app{height: 100%;}第二步:网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth (包括边线的宽)网页可见区域高:document.body.offsetHeight (包括边线的宽)我们将document.body.clientWidth赋值
2020-09-06 15:36:43
3733
原创 nginx安装免费证书开启SSL,完整版
免费证书安装参考链接为你的网站来安装一个证书十分简单,只需要使用电子子前哨基金会EFF的 Certbot,就可以完成。1)首先,打开 https://certbot.eff.org 网页。2)在那个机器上图标下面,你需要选择一下你用的 Web 接入软件 和你的 操作系统。比如,我选的,nginx 和 Ubuntu 14.043)然后就会跳转到一个安装教程网页。你就照着做一遍就好了。拿centos7举例https://certbot.eff.org/lets-encrypt/centosrhel
2020-09-03 17:04:23
922
原创 Android日常开发 (50)如何查找应用启动入口,通过隐式意图拉起三方应用
前言android隐式意图可以帮我们唤起系统内的其它应用,这个很好理解。系统桌面也是一个app,它能做到的事情我们一样可以做到。 Intent intent = new Intent(); ComponentName cmp= new ComponentName(pkg, cls); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_L
2020-09-02 16:39:03
739
原创 javascript记录点滴,日积月累
Lodash常用函数pick用法提取指定属性 param=_.pick(param,['_id','question'])pickBy用法提取值满足条件的属性 param= _.pickBy(param, function(v) { return _.isString(v) || _.isBoolean(v)})omit用法剔除对象中键为指定值得属性param=_.omit(param,['_id','question'])omitBy用法剔除对象中值为空的属性param= _
2020-08-31 17:00:24
147
原创 Android 日常开发 (49)使用融云的时候在子线程中执行初始化的坑
前言在遇到这个问题的时候,我只能看到的报错信息FATAL EXCEPTION: main Process: com.xxx.yyy, PID: 29472 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.crobot.fifdeg/com.xxx.yyy.base.WebViewActivity}: android.view.InflateException: Binary XML file l
2020-08-17 14:09:02
472
原创 Android 日常开发(48)android.os.FileUriExposedException最佳解决办法
前言我之前在weex的问题合集里面讲过一次这种异常的处理办法不过当时时通过关闭android严苛模式的视角处理的。今天我们来深入sdk,看看这个问题的最佳解决方式1.我们通过android developer官网搜索android.os.FileUriExposedException这个异常The exception that is thrown when an application exposes a file:// Urito another app.This exposure is di
2020-08-12 14:00:07
478
原创 Android 日常开发(47)okhttp 服务器端使用Gzip问题解决
前言上一篇文章我们讲到Gzip的问题,我们也找到了问题的原因。我没通过重定义response来获取contentLength。这一篇我们具体讲以下Gzip问题的由来和解决的思想。排查这个问题的时候很慌,之前没有遇到过,第一次遇到,所以就。。恢复当时debug的心请,一切准备就绪我把pdf上传到七牛云之后,试过。loading框跑的好好的。但是一换上公司的文档地址,就各种奇葩事故,大型翻车现场调试结果显示contentLength=-1。一脸懵逼的我,果断上网搜索。搜索引擎编程。收了白天也没有找
2020-08-06 15:14:47
957
原创 Android 日常开发(46)okhttp与WebView同步cookie(下)
前言上一篇文章我们讲了okhttp的cookiejar和webview的使用的android cookieManager。这个设计确实不好,为啥三方库就不能基于系统进行扩展呢?我的分析如下:首先okhttp并不只适用于android开发,java web开发在跨应用也有大量的使用常景。而内置与android.jar包下面的CookieManager跟android系统结合的特殊性,使得okhttp有自己的一套cookie运行,与cookie的本质和机制是差不多的。问题描述现实生活我们总能遇到奇奇
2020-08-03 17:29:36
608
原创 Android 日常开发(45)okhttp与WebView同步cookie(中)
前言:上一篇我们讲了关于同步cookie到webview中,这篇我们将会结合okhttp来搞一波,如何将webview的cookie和okhttp的cookie进行同步关于okhttp对cookie的支持上一篇我们用到了android.jar包中的CookieManager这个类,它是用来帮我们持久化cookie的。说白了就是帮我们把cookie信息保存到数据库中okhttp里面有个cookie的接口,如下:我们需要实现这个接口,对我们的cookie进行管理(数据同步)public class
2020-08-03 14:51:04
565
原创 Android 日常开发(44) okhttp与WebView同步cookie(上)
需求描述:将app登陆接口返回的TGC信息写入webview的cookie当中技术名词CAS、Cookie、TGC解决方案我们都知道okhttp的CookieJar接口为我们获取网络请求过程中cookie信息提供了方法。android里面的CookieManager是用来给WebView提供原生管理cookie的办法的。这里我们我们打通上述问题的关键就是使用CookieManager来实现原生方法中登陆返回的cookie写入CookieManager中来达到WebView可以直接使用写入的cook
2020-07-28 20:47:13
405
原创 Android日常开发(42)build打包,配置多环境最佳实践(debug release uat)
https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.BuildType.htmlgradle DSL buildTypes { release { if (file(Key_StoreFile).isFile()) { signingConfig signingConfigs.release
2020-07-24 21:02:50
851
原创 MMKV框架解析
引入github:MMKV——基于 mmap 的高性能通用 key-value 组件 MMKV 是基于 mmap 内存映射的 key-value组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源。MMKV 源起 在微信客户端的日常运营中,时不时就会爆发特殊文字引起系统的crash,参考文章,文章里面设计的技术方案是在关
2020-07-24 16:53:47
655
原创 常用三方库清单列表,方便快速查找
名称描述github链接ImmersionBar沉浸式状态栏解决方案https://github.com/gyf-dev/ImmersionBarSmartRefreshLayout下拉刷新上拉加载https://github.com/scwang90/SmartRefreshLayoutfastjsonjson解析https://github.com/alibaba/fastjsongsonjson解析https://github.com/googl...
2020-07-24 13:53:15
426
原创 Android日常开发(41)为控件设置id时出现 inner element must either be a resource reference or empty
AAPT打包出现问题需要做如下调整出现问题的代码 <item name="biz_tag_key_sense_id" type="id">100</item> <item name="biz_tag_key_cn_definition" type="id">101</item>修改后的代码 <item name="biz_tag_key_sense_id" type="id" /> <item name="biz_
2020-07-23 23:04:38
397
原创 项目经验展示
应用icon应用名称esight应用描述面向企业数据中心、园区/分支网络、统一通信、视讯会议、视频监控的一体化融合运维管理解决方案,为企业ICT设备提供自动化配置部署、可视化故障诊断、智能化容量分析等功能。华为eSight主要应用于数据中心融合运维、平安城市智能运维、WLAN全生命周期管理等场景,能有效帮助企业提高运维效率、降低运维成本、提升资源使用率,有效保障企业ICT系统稳定运行。应用链接http://www.pc6.com/az/299038.html开发时间2015年8月-201
2020-07-15 17:16:22
901
原创 Android日常开发系列文章列表
原创 Android日常开发(40)BottomNavigationView 实现底部导航原创 Android 日常开发 (39)javax.net.ssl.SSLHandshakeException:原创 Android日常开发(38)旧项目迁移AndroidX原创 Android日常开发(37)API27引入ExoPlayer2.11.4项目报错处理原创 Android日常开发(36) Project needs to be converted to androidx.* dependencie
2020-07-13 21:59:38
516
原创 Android日常开发(40)BottomNavigationView 实现底部导航
前言一般我们实现底部导航都是采用,自定义View的方式来实现的,今天我们使用Google为我们提供的BottomNavigationView来实现这个功能。首先引入依赖api 'com.android.support:design:28.0.0'在布局中写入我们的BottomNavigationView UI组件 <android.support.design.widget.BottomNavigationView android:id="@+id/bottomN
2020-07-08 11:04:38
554
原创 设计模式(二)-建造者模式-创建型-创建对象的最佳方式
定义建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。使用场景:一些基本部件不会变,而其组合经常变化的时候。1、需要生成的对象具有复杂的内部结构。2、需要生成的对象内部属性本身相互依赖。UML类图:我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Co
2020-07-03 16:18:45
297
原创 设计模式(一)单例模式-创建型-减少重量级对象创建
定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单利模式的使用场景确保某个类只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。参考文档 classDiagram Animal <|-- Duck Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender
2020-07-02 21:45:25
336
commons-codec-1.14-SNAPSHOT.jar
2019-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人