- 博客(43)
- 资源 (1)
- 收藏
- 关注
原创 Flutter混合栈管理
越来越多的厂商开始接入Flutter,但是很多厂商都是成熟的App,完全从头使用Flutter开发应用不现实,采用混合开发则是一种非常好的切入方式。
2022-08-26 17:45:28
1653
1
原创 Android WebView性能分析与优化
一、简介一提到App内的WebView加载网页,大家的第一印象就是:慢、耗流量、体验比原生差。但WebView加载网页也有其天生的优势:动态,跨平台,开发周期短。那能如何解决WebView加载网页慢和体验差的问题呢?可以思考下面两个问题:从打开浏览器到网页完全展示都发生了什么?如何给WebView加载网页提速?二、整体思维导图三、衡量标准快慢是一个相对量,如何衡量WebView的快慢呢?3.1 用户体验的时间尺度从用户角度来看,如下图是2018年份百度移动端的统计数据:2018年
2021-07-27 10:45:19
5177
原创 Flutter之Android包大小分析
一、背景空的flutter项目编译生成Android apk包其体积约50MB左右,而空的原生Android项目编译生成的Android apk包其体积仅3.6MB左右,二者相差巨大!什么原因导致这一结果呢?基本猜测:flutter生成的Android安装包apk中包含了大量flutter基础库代码。这些基础代码以什么样的形式存在apk中的呢?为了解决以上疑惑故对flutter的Android包进行分析对比。二、Android包结构Android apk包本质是一个zip压缩包,可以将apk后缀改
2021-07-27 10:06:29
3017
4
原创 Flutter WebView使用以及分析
Flutter WebView使用以及分析一、背景在开发过程中很多时候都需要用WebView展示网页,在android中可以直接使用WebView控件加载网页,iOS也有WKWebView或UIWebView,那么在flutter中如何加载网页?从以下问题入手:flutter中是否有类似原生的WebView控件?flutter中如何使用WebView加载网页?flutter的WebView如何与js通信的?flutter中WebView是如何实现?二、Flutter WebViewfl
2021-07-23 14:52:38
21888
5
原创 Android点击空白处隐藏键盘最优解
目录Android点击空白处隐藏键盘最优解主要思路代码实现Android点击空白处隐藏键盘最优解主要思路a.在Touch事件分发的起点Activity.dispatchTouchEvent监控键盘的状态b.在ACTION_UP时判断是否需要隐藏键盘c.处理软盘弹起时可以滑动布局(非必须,看产品)该方法的有点是无需关注View细节,统一处理逻辑,方便简洁!代码实现在BaseActiv...
2019-09-16 16:02:06
213
原创 Retrofit2深度解析
Retrofit2深度解析一、简介本文基于implementation 'com.squareup.retrofit2:retrofit:2.5.0' 编写Retrofit2大致的使用步骤如下:1.初始化Retrofit2.构建网络请求3.发送请求,解析数据我们通过使用顺序来一步一步解析源码首先,看初始化的代码Retrofit retrofit = new Retrofit.Bu...
2019-05-22 11:12:44
685
转载 浅谈常见的七种加密算法及实现
原文链接 https://juejin.im/post/5b48b0d7e51d4519962ea383前言数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。正文...
2018-11-16 10:39:46
1018
转载 一种极低成本的Android屏幕适配方式
一种极低成本的Android屏幕适配方式传统dp适配方式的缺点屏幕尺寸、分辨率、像素密度三者关系这样会存在什么问题呢?探索新的适配方式梳理需求找兼容突破口最终方案Showcase原文链接 https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA在Android开发中,由于Android碎片化严重,屏幕分辨率千奇百怪,而想要在各种分辨率的设备上显示基本一...
2018-11-06 18:00:11
156
转载 JVM内存结构
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。先看一张图,这张图能很清晰的说明JVM内存结构布局。Java的...
2018-09-04 14:43:46
131
原创 Python缓存装饰器类适用于redis,memcached和dict对象等
简介在web开发中,缓存是经常用来提高服务器的响应速度以及减少数据库压力的用力手段。在处理缓存时,有三个重要的步骤生成缓存键,存入缓存和获取缓存数据。对于不同的缓存软件(Redis,Mencached等)操作基本相同,只是在具体的存储获取环节存在差异,所以将常用的缓存处理过程封装成一个装饰器类(CacheDecorator下文给出实现代码)。通过装饰器类可以派生出基于不同缓存软件的具体缓存装饰器类如
2017-10-17 17:53:19
1471
转载 在 Flask 中使用 Celery
在 Flask 中使用 Celery原文地址:http://www.pythondoc.com/flask-celery/first.html后台运行任务的话题是有些复杂,因为围绕这个话题会让人产生困惑。为了简单起见,在以前我所有的例子中,我都是在线程中执行后台任务,但是我一直注意到更具有扩展性以及具备生产解决方案的任务队列像 Celery 应该可以替代线程中执行后台任务。不断有读者问我关于 Cel
2017-10-15 14:09:24
695
原创 nginx配置文件
Nginx中文文档:http://www.nginx.cn/doc/index.html Nginx官方文档:http://nginx.org/en/docs/nginx的配置文件的位置: /etc/nginx/nginx.conf,使用sudo vim /etc/nginx/nginx.conf查看默认配置信息。 nginx的配置文件的主体结构:#运行用户 user www-data
2017-10-12 15:59:24
418
原创 Ubuntu安装apiDoc以及入门教程
一.apiDoc简介apiDoc是用来生成RESTful风格Web API文档的工具,支持现在流行的大部分编程语言,如Python,Java,C#, Go, Dart, Java, JavaScript, PHP, Scala 等。在源代码的注释中使用apiDoc提供的注解信息来生成文档信息。apiDoc的gitHub地址:https://github.com/apidoc/apidoc。apiDo
2017-09-28 18:06:13
2066
1
转载 ubuntu16.04安装jdk、Android Studio、Android Sdk
第一次接触ubuntu,研究安装这些东西还好只花了两天的时间。现在记录一下,这两天碰到的坑,以防以后再掉进去。 首先,我前几天先是安装了ubuntu kylin,然后安装 android 开发环境,但是碰到很多问题,后来上网搜索了一下 大家对ubuntu kylin的看法, 发现 贬 > 褒,所以果断卸载了ubuntu kylin,装上了 现在的ubuntu16.0.4。第一步、安装JDK安装JD
2017-07-18 18:18:20
18343
转载 真正的 Tornado 异步非阻塞
其中 Tornado 的定义是 Web 框架和异步网络库,其中他具备有异步非阻塞能力,能解决他两个框架请求阻塞的问题,在需要并发能力时候就应该使用 Tornado。但是在实际使用过程中很容易把 Tornado 使用成异步阻塞框架,这样对比其他两大框架没有任何优势而言,本文就如何实现真正的异步非阻塞记录。 以下使用的 Python
2017-05-31 16:46:35
19375
6
原创 理解RESTful
RESTful是什么REST是一套对资源操作的规范,资源通常指的是可通过http协议操作的存储在服务器上的文字、文件、图片和服务等资源。采用这套规范构建的以网络为基础的应用软件的架构叫做RESTful架构。详细介绍可以参考:The RESTful CookBook为什么要用RESTful目的是在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。
2017-05-11 15:12:48
323
原创 数据库范式
1NF:原子性,表不能在分割。2NF:(A,B)->C(非主属性C完全依赖码(A,B),不存在A->C或者B->C)3NF:A->B->C(不存在传递依赖,码A,B和C为非主属性)BCNF:码(A,B),(B,C)(不存在着主属性对于码的部分函数依赖与传递函数依赖,即A->C)
2017-04-26 11:37:08
211
原创 Android应用的正确退出“姿势”
在应用推出时候要关闭所有存活的Activity太能完全退出应用,下面介绍常用的关闭所有Activity的方法。一、容器法顾名思义,容器法就是用一个列表记录所有存活的Activity,当应用退出时候循环遍历所有的Activity执行finish()方法。具体实现如下:import java.util.LinkedList;import java.util.List;impo
2016-03-22 11:13:31
707
原创 Android中的Handler、Looper和MessageQueue的使用以及原理
提到Handler大家一定都不陌生,通常我们都是在子线程通过Handler切换到主线程中去更新View的显示内容,然而很少接触Looper更没有感觉到MessageQueue的存在,然而三者是密切相关的,那么接下来分别介绍他们的作用、使用以及原理来加深对他们的理解,来达到熟练使用Handler的目的。一、Handler的作用1、定时处理消息或执行任务2、在其他线程中处理消息或执
2016-03-03 14:00:38
1135
原创 Android中ListView、GridView的通用适配封装简化代码
ListView和GridView是我们平时经常用来展示集合数据,每次都要为每种列表建一个专门的适配,虽然创建适配器灰常简单,但是每次都会有很多的类似的代码,最为人类中最懒的程序“猿”,你能忍受这种重复的操作么?不管你能忍不能忍,反正我是不忍了。于是今天的主角通用适配就诞生了。闲言少叙,直接上代码,相信她一定是人见人爱的!
2016-02-24 22:33:29
784
原创 Android事件分发机制以及滑动冲突处理
方便日后的查看与交流,将学习与实践总结如下。一、Android事件传递分析1、ViewGroup中事件分发机制相关的方法a、dispatchTouchEvent 事件分发器b、onInterceptTouchEvent 处理是否拦截事件c、onTouchEvent处理对应的事件ViewGroup中他们的代码关系如下伪代码表示:public boole
2016-02-24 22:09:47
5245
原创 Java中的线程池
1、线程池的优点:a、重用线程池中的线程,避免线程创建与销毁带来的开销。b、有效的控制线程池的最大并发数量,避免大量线程之间抢夺资源而造成的阻塞现象。c、能够简单的管理线程,并提供定时执行以及指定时间间隔循环执行等功能。2、ThreadPoolExecutor类线程池的实现类,他提供正真的线程池的功能。如下是该类的继承关系,以及完整类签名和主要的构造函数:继承关系:
2016-02-24 18:59:06
340
转载 给Android程序员的一些面试建议
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/49230997前言应大家的邀请,写一篇关于Android面试相关的博客,需要说明的是本文只针对Android应用开发,不针对rom开发以及逆向工程。我想面试对于程序员来说是很重要的一件事件,面试结果的好坏直接决定了能否进入某个公司以及以什么级别和待遇进入某个
2015-12-22 14:55:21
359
转载 Android学习路线指南
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/49560409前言看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程师的确不容易,一般需要进行大量的面试才能挑选出
2015-12-22 14:39:42
347
原创 常用的输入检测集合(不定时补充)
输入数据是每一个应用或软件必不可少的获取信息的方式,然而用户的输入存在极大的不确定性,正因为不确定性极大所以输入检测才显得尤为的重要。输入检测是良好应用或软件的基础,输入检查可以提高软件的容错率进而提高用户的体验感!
2015-11-17 15:10:25
531
原创 Android自定义弹性ScrollView
总结了下最近写的弹性ScrollView,如下代码主要是通过触摸事件加动态更改布局实现的弹性ScrollView,具体分析都在注解中!
2015-08-26 17:08:30
734
原创 设计模式——桥接模式(Brigde Pattern)
桥接模式:桥接模式是指将抽象部分和它的实际部分分离,使它们可以独立地变化。例如买饮料时分饮料的类别和容量,通过类别和容量的不同组合成具体的规格饮料。其中具体的饮料是实际部分,类别和容量是抽象部分。
2015-01-21 16:48:57
564
原创 设计模式——观察者模式(Observer Pattern)
观察者模式:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个被观察者对象。这个被观察者对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
2015-01-21 10:36:16
447
原创 设计模式——适配器模式(Adapter Pattern)
适配器模式的定义:适配器模式:把一个类的接口转换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的那些类能够在一起工作。适配的作用有两个:1、添加新的功能。2、转换接口。转换接口是其主要的功能能。适配器模式分为三种:类适配器、对象适配和缺省适配器(该类适配器不做详细介绍)。
2015-01-15 14:54:43
320
原创 设计模式——生成器模式(Builder Pattern)
生成器模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式的主要思想是抽象出创建对象的步骤,使得这些步骤的不同实现可以创建不同的对象表示。
2015-01-06 22:47:34
680
原创 设计模式——抽象工厂(Abstract Factory Pattern)
抽象工厂的运用场景: 当客户对象要从一个相关的产品组中创建一个对象,而没有必要知道到底创建哪个对象时,可以应用抽象工厂模式抽象工厂的优缺点:优点:1、可以产生一系列的产品实例2、产生新系列产品很方便扩展性很好,只需要实现对应的产品接口和工厂接口就能轻松实现系列扩充,符合开闭原则缺点: 添加新产品改动较大,如添加一个新产品XXCar就要改动CarFactory接口不符合开闭原则
2015-01-05 22:27:35
758
原创 设计模式——命令模式 (Command Pattern)
命令模式:目的是解除调用类与接收者类之间的耦合。命令模式的构成: 1、Client做初始化,实例化所有将要执行的Commend对象,和提供对应功能的Receiver(即TV)对象。 2、Commend是命令接口,其子类负责提供请求的处理功能,但他不包含功能的具体实现 2、Invoker是控制类,决定何时调用某功能。 3、Receiver(TV)是所有命令的代码实现类。命令模式的优点:1、命令模式可以实现调用者和接受者之间的解耦。2、命令
2014-10-20 17:16:35
602
原创 设计模式——访问者(Visitor Pattern)
访问者模式:封装一些施加于某对象数据结构上的元素的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。为相同类型的数据结构提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机。
2014-10-19 22:03:06
583
原创 Java中类与类之间的关系
类与类之间的关系:1、泛化 (Generalization)2、实现关系 (Realization)3、依赖(Dependency)4、关联 (Association)5、聚合 (Aggregation)6、组合 (Composition)
2014-10-14 14:50:18
845
原创 设计模式——组合模式(Composite Pattern)
概念:组合模式有时候也叫做部分-整体的模式,在处理树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂的元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式使得客户对单个对象和组合对象的使用具有一致性。
2014-10-12 22:22:16
508
VerifyUtils
2015-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人