自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Just can't kickflip.

must be nice.

  • 博客(13)
  • 收藏
  • 关注

原创 Android内存优化学习笔记

最近在学习Android内存优化方面的知识,下面做一下笔记。首先内存优化可以从三方面入手,分别是设备分级、Bitmap优化和内存泄漏。设备分级目标是针对设备性能的好坏使用不同的内存分配和回收策略。设备分级对低端机关闭复杂的动画或是某些功能;使用565格式的图片;使用更小的内存缓存。缓存管理使用统一的缓存管理机制,做到用时分配,及时归还。可以使用onTrimMemory回调,根据不同的状态决定释放多少内存。进程模型减少应用启动的进程数,减少常驻进程、有节制地保活。安装包体积安装包中的

2020-09-17 15:54:23 166

原创 Flutter单元测试

1. 什么是单元测试单元:程序的class、function测试:测试某个特定条件下(或者场景)下某个特定函数的行为是否正常。总:单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。2.为什么要写单元测试List item确保app在添加更多功能或更改现有功能时能继续稳定运行不需要编译、运行、打包才能测试,提升开发效率在验证的过程中,开发可以深度了解业务流程。别人看通过看单元测试就知道哪个逻辑跑了多少函数、需要注意哪些边界条件。3. 编写单元测试的流程

2022-01-23 14:31:38 1112

原创 【Flutter】CommonQuery,一个方便你构造通用查询请求体的插件

CommonQuery可以让你以链式调用的形式构建你的http请求体,当你的请求体有包含以下这些通用字段时:`where`/`orderBy`/`limit`/`pageNum`/`skip`/`fields`/`params`

2022-01-22 14:34:48 1925

原创 Dio中锁的巧妙实现

看Dio库源码的时候,发现其拦截器管理的逻辑处用到了一个Lock,这个Lock巧妙地利用了Completer和Future的机制来实现,记录一下。/// Add lock/unlock API for interceptors.class Lock { Future? _lock; late Completer _completer; /// 标识拦截器是否被上锁 bool get locked => _lock != null; /// Lock the interce

2021-07-06 14:38:36 414

原创 Flutter MethodChannel的使用及原理解析

Dart和原生通信一次典型的方法调用过程类似网络调用,由作为客户端的 Flutter,通过方法通道向作为服务端的原生代码宿主发送方法调用请求,原生代码宿主在监听到方法调用的消息后,调用平台相关的 API 来处理 Flutter 发起的请求,最后将处理完毕的结果通过方法通道回发至 Flutter。调用过程如下图所示:1. 基本用法以跳转应用市场为例//声明MethodChannelconst platform = MethodChannel('channelName');//处理按钮点击ha

2021-05-28 18:15:10 7035 3

原创 Android的ButterKnife配置不正确导致的空指针问题

如果在module中使用api ‘com.jakewharton:butter knife:10.2.1引入依赖,如果不在app的build.grade中添加annotationProcessor ‘com.jakewharton:butterknife-compiler:10.2.1’的话,会导致绑定view失败然后空指针的问题。

2020-10-12 16:42:11 272

原创 Android卡顿优化学习笔记

造成卡顿的原因有很多种,但最终都会反应到CPU时间上,CPU时间分为用户时间和系统时间。用户时间:执行应用代码所需时间。系统时间:执行内核态系统代码所需时间,如I/O、锁、中断。问题:当出现卡顿的时候,如何区分是应用的问题,还是系统的问题?1. 卡顿问题分析指标CPU使用率首先应该先查看CPU使用率,通过/proc/[pid]/stat可以得到某个进程的CPU使用情况,会得到utime和stime两个重要字段。应用系统时间若超过30%,则应检查是I/O过多还是其它系统调用问题。Andr

2020-09-24 14:12:53 370 1

原创 Android崩溃优化学习笔记

Android中的两种崩溃分别是Java崩溃和Native崩溃。Java崩溃:Java代码中出现未捕获异常,导致程序异常退出。Native崩溃:Native代码中访问非法地址、地址对齐出现问题、程序主动abort。难点在于Native崩溃的捕获,其流程如下:编译端:编译C/C++代码时,将带符号信息的文件保存下来。客户端:捕获崩溃时,尽可能收集有用信息写入日志文件,在合适的时机上传服务器。服务端:读取客户端上报的日志文件,寻找合适的符号文件,生成可读的C/C++调用栈。如果涉及到Nat

2020-09-22 16:47:20 269 1

原创 通俗理解EventBus工作流程

想了个办法方便让自己记忆EventBus的工作流程,就是代入生活中的事情。EventBus的工作流程可以通俗地类比于去餐厅吃饭,顾客是事件订阅者,厨房是发送者。首先顾客来到餐厅,查看菜单,开始点菜,在菜单上打勾勾什么的,菜可以认为是事件(Event),点完之后由服务员(subscriberMethodFinder)接管,服务员找出顾客点了什么菜,然后将其一样一样录入餐厅的点餐系统(subscribe方法),点餐系统由subscriptionsByEventType、typesBySubscriber、s

2020-08-27 15:10:01 180

翻译 [翻译]Kotlin的Json序列化速成,不用Gson

你想将你的Data class序列化为Json或者反之,应该很简单,Json这个东西出来已经很久了。在Android开发中或者说传统的Java开发中,这种任务通常交由一个外部库来完成,这个库通常来说都是谷歌的Gson,但近来随着带有null aware特性的Kotlin语言的推出,用这个库的话就缺少了点优雅。当然除了Gson还有其它的库可以用(如:Moshi),至于Kotlin本身,自从1.3版本后,它提供了自己的Json序列化和反序列化方式(也支持protoBuf)。配置Kotlin自己的方法是一

2020-08-18 10:39:34 817

原创 Android开发遇到的问题汇总

记录一下自己在安卓开发中遇到的问题以及解决方案。1.USB设备无法识别问题网上下载一个手机助手类的应用,让它连上手机,然后它就会帮你把手机的驱动安装好了,打开USB调试,进入Android Studio,运行程序,成功了!2.setSupportActionBar报错方法参数报错把import android.widget.Toolbar更换成Import android.support.v7.widget.Toolbar3.Error:The supplied javaHome seems

2020-08-09 19:25:23 822

原创 Android面试之Activity部分

一.说下Activity的生命周期?正常情况下的生命周期:onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()异常情况下的生命周期:1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建默认情况下,如果我们的Activity不做任何处理,那么当系统配置发生改变后,...

2018-09-25 14:34:48 471

原创 Ubuntu语言设置里简体中文是灰色的问题,已解决

关于中文选不了也拖不上去这个问题,一直困扰了我好久,之前看了各种教程,也照着做了,但是都不起作用,偶然一个大胆的猜测,居然成功了。解决方法是:如果你上面已安装语言满四个了,那就把不用的删掉或者把它拖到灰色区域,这个时候再把简体中文拖到最上面,然后重启,问题解决。...

2018-09-24 22:03:10 25450 43

空空如也

空空如也

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

TA关注的人

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