自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

菜鸟博客

不积跬步无以至千里

  • 博客(498)
  • 资源 (25)
  • 收藏
  • 关注

原创 Android AndroidNSSP的简单说明

参考资料:Android 根证书管理与证书验证(3)Android CertificateSource 简单说明java.security.Provider 是Java加密框架的一个重要组成部分,根据其API所描述:该类表示Java安全API的“提供者”,其中提供者实现Java安全性的部分或全部部分。 提供商可以实施的服务包括:算法(例如DSA,RSA或SHA-256);密钥生成,转换和管理工具(例如特定于算法的密钥)。Java加密体系架构的整体示意图如下所示:Provider是一个抽象类,通过其

2021-01-28 16:46:56 550

原创 Android CertificateSource系统根证书的检索和获取

参考资料:Android 根证书管理与证书验证Android的证书验证过程在[Android okhttp https TrustManager简单总结](https://yanchen.blog.csdn.net/article/details/113109782)一文中简单的描述了TrustManager的作用。我们知道在Java中将证书封装成了X509Certificate对象。通过该对象提供了一系列get方法可以获取到证书的公钥,序列号等一系列信息。见下图:我们在TrustManager的

2021-01-27 16:21:04 1436

原创 Android https TrustManager checkServerTrusted 详解

在okhttp源码解析中详细的分析了下其内部原理,现在就okhttp配置https的东东做一个简单的笔记。网上查询的一些Okhttp中忽略HTTPS验证的代码如下所示。 TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { @Override public void checkClientTrusted(java.security.cert.X

2021-01-25 15:45:55 3395 1

原创 设计模式之备忘录模式

俗话说好记性不如烂笔头,这句话用来形容备忘录模式的作用再恰当不过了。备忘录模式的作用就是记住某对象的内部(历史)状态(或历史数据),以备将来使用的时候随之恢复之前的某一状态(或数据)。也就是说备忘录设计模式提供了实现可撤销操作的解决方案.通俗的将就是该模式让你有一种吃了后悔药的感觉。实际上保存一个对象的数据有很多种有段,不能为了模式而模式,这样个人认为有点违背模式的初衷。比如我们可以将对象的数据写到文件里、也可以存到数据库里。手段不同但是都有一个目的,就是保存之后为以后恢复数据使用,黑猫白猫,在备忘录的世

2021-01-07 11:10:33 395

原创 设计模式之享元模式

FlyWeight模式,也就是享元模式,其主要目的是“尽可能减少内存的使用量,于相似物件中分享尽可能多的信息”!,在面向对象的世界里,我们主要通过对象来打交道,所以需要创建大量的对象。所以对于面向对象的语言来说,主要是通过减少对象创建的数量来减少内存占用,从而提高了性能。其实核心也就是通过对象的复用技术来避免重复创建符合要求的对象,该模式试图通过检索符合匹配规则的对象,如果有就重用之,没有则创建一个新的对象(同时存储起来,供下次使用)。仔细思考下,事实上这个模式结合创建者模式使用效果更佳,在创建者创建对

2021-01-04 15:37:16 297 1

原创 2020年小结

时间过得真快,2020年已经来到了尾声。简单的惠顾下近年来的收获。还是要用数据说话,所以本篇总结会涉及到大量的数据。1、在CSDN发表原创博客36篇不足之处:上半年博客写的有点多,后边年因为换工作比较忙的原因有所松懈,其实主要是因为懒,没怎么写。Flutter付费专栏没能及时更新,目前才写了49篇!后面会继续更新Flutter相关博客,看能否靠着付费专栏发家致富。同时明年争取把设计模式专栏写完,目前才写了11篇设计模式的文章,有点少!另外一个不足之处就是坚持写了10年的博客,截止发稿前粉丝才1011个

2020-12-24 15:13:16 501 6

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

学而时习之,温故而知新。这句话用在设计模式上真是太恰当不过了!博主从上大二的时候就开始阅读设计模式,当时对面向对象的思维理解的不是很深刻。所以一些设计模式弄得一知半解,只知其形而不知其神。工作之余也没有放弃过对设计模式的学习和琢磨,每次阅读相关的设计模式总有不同的心得体会。收货颇多。所以在此建议读者也要时不时翻看下设计模式。从中演化出适合自己的模式出来。可以说设计模式是面向对象思维的集大成者。阅读越有味道。闲言少叙,本篇博文就简单的梳理下博主对责任链模式的理解和体会,如有不当之处欢迎批评指正。正规的责任链

2020-12-08 10:31:08 527

原创 Android WebView监听console错误信息

根据需求,我们要拿到h5的错误信息,并将error信息进行上报。查询了下Android WebView的API发现了WebChromeClient这个方法可以满足要求: @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { //获取log的级别 switch (consoleMessage.messageLevel()){ case ERROR://将error信息上报到服务

2020-12-02 16:28:16 8325 16

原创 设计模式之builder模式

该模式也是常见的一种设计模式,在常用的

2020-12-01 10:48:59 1022 8

原创 git 提交代码的好习惯

好久没写博客了,不能偷懒,在此记录下自己git提交代码的的一些规范化步骤和命令:1、git status2、git diff3、git stash save “贮藏起自己的改动,防止丢失“4、git checkout master5、git pull origin master ( origin master可以不写)6、git checkout myBranch //切换到自己的分支7、git rebase master //将myBranch分支变基到master8、git stash

2020-11-24 08:43:50 1115 2

原创 Flutter BuildOwner之inactive Elements浅析

通过Flutter BuildOwner之dirty elements简析一文,我们知道BuildOwner里面又两个集合:一个是drity elements集合,主要负责对dirty状态的Element进行重新构建。另外一个集合就是本文的主角inactive Elements。inactive意思是不活动的,无效的。在Element中通过mount方法进行widget tree或者element tree的挂载,unmount方法进行想法将element从element tree中剥离。所以可以推测出 i

2020-10-24 00:03:22 446

原创 Flutter BuildOwner之dirty elements简析

BuildOwner在Flutter起到了举足轻重的作用,本篇博文就来分析它!阅读本片博文之前,需要提前知道如下知识:Flutter之Binding简单梳理Flutter之Widget构建过程详解Fultter之Element和Widget对应关系解析从设计上来讲,Flutter在整个app是个全局的实例,是一个类似Android Application的单利对象。在WidgetsBinding初始化的时候会初始化一个BuildOwner对象,并降其设置给Element对象以及Element对象的

2020-10-21 14:37:25 610

原创 Flutter BindingBase服务扩展浅析

本篇博文涉及到的名字Service Extension在此博主直译为服务扩展。假设你已经读过博主的如下两篇文章:Flutter之Binding简单梳理和Flutter之SemanticsBinding和WidgetsBindingObserver简析。BindingBase,顾名思义是Flutter一切Bindding对象的基础类,从其构造器来看该基类提供有两个重要的方法供子类扩,这两个方法就是initInstances和initServiceExtensions: BindingBase() {

2020-10-12 13:38:48 660

原创 Flutter之SemanticsBinding和WidgetsBindingObserver简析

根据Flutter之Binding简单梳理得知,Flutter在runApp方法运行的时候会初始化一系列Binding,而SemanticsBinding就是其中之一。本篇博文就简单熟悉下SemanticsBinding这个Binding的作用。mixin SemanticsBinding on BindingBase { static SemanticsBinding get instance => _instance; static SemanticsBinding _instance;

2020-09-25 14:46:22 2280

原创 Flutter之Binding简单梳理

阅读本片博文的时候,博主假设你已经对Dart的mixin语法有所了解。本篇博文BindingBase的执行流程做一个简单的梳理,方便以后阅读Flutter其他源码。我们知道Flutter是通过如下代码运行的:void main() { runApp(MyApp());}void runApp(Widget app) { WidgetsFlutterBinding.ensureInitialized() ..scheduleAttachRootWidget(app) ..sch

2020-09-16 11:14:41 1792

原创 Flutter之_slot 插槽属性详解

阅读本博客的前提是博主假设已经了解Element和Widget的关系,以及Widget的基本构建过程。如果不了解可以先阅读博主的:Flutter之Widget构建过程详解。本文主要分析下Element中的一个_slot属性,明白了这个属性的作用,后面在分析其他源码的时候就有所帮助。abstract class Element extends DiagnosticableTree implements BuildContext { //第一句注释 /// Information set by

2020-09-02 15:14:42 1139

原创 力扣之好数对的数目

该题是力扣上面的一道难度为简单的题,虽然难度标志为简单,但是看了大家的解法确实能学到一点东西,下面就来分析分析这道题(原题传送门),题目如下:给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。示例 1:输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始示例 2:

2020-08-28 10:51:28 500 1

原创 Flutter之Visibility和Opacity使用说明

在Android中隐藏或者显示一个View很容易,直接通过view的setVisibility()方法来控制即可。对于Flutter来说则提供了一个Visibility控件来控制一个Widget的展示和隐藏。Visibility的控制粒度相比于Android来说更细,本篇博文就来简单说明下这个控件。先来看如下代码:Center(child: Text("Hello flutter"))上述代码意图很简单,就是在屏幕中间展示“Hello Flutter”这两个字,那么如果我想让这行字隐藏则可以把这上述代

2020-08-21 10:14:45 3330

原创 LinearLayout removeAllViews后再 addView页面不展示

博主今天使用SmartRefreshLayout+ScrollView +ViewPager+Fragment的时候遇到了一个问题,下图是实现的效果:上图每个Tab对应的页面都是一个Fragment,此时页面定位到首页这个tab,首页Fragment的布局很简单:就是一个LinearLayout: <LinearLayout android:id="@+id/list_layout" android:layout_width="match_parent"

2020-08-10 17:17:52 2993

原创 Android studio 4.0 Layout Inspector查看当前Activity

在使用Android studio的时候博主很喜欢使用Layout Inspector功能来查看当前的Activity。这样对于熟悉新项目来说特别有用。但是升级了4.0版本之后发现每次点击Layout Inpsector都是直接显示布局结构了,并没有熟悉的Activity选择框,然后博主一番寻找找到了解决方式:点此查看。修改之前:Tools–>Layout Inspector修改方法:File > Settings > Experimental 把 Enable Live Layout

2020-07-31 17:16:10 5912

原创 Mac配置adb,彻底解决zsh: command not found: adb问题

第一次使用Mac,做一个关于adb 配置的简单的笔记步骤如下:1、sudo vim ~/.bash_profile,打开 .bash_profile文件。2、按i进入输入模式,在文件内容的末尾加入以下内容:export ANDROID_HOME=/Users/userName/Library/Android/sdkexport PATH=${PATH}:${ANDROID_HOME}/platform-toolsexport PATH=${PATH}:{ANDROID_HOME}/tools

2020-07-01 16:23:13 3675 2

原创 Flutter之路由系列之Navigator简析

博主的博客Flutter之路由系列之LocalHistoryRoute简单的梳理下Flutter的路由机制,其中Navigator扮演者重要的角色。本篇博文就简单梳理下Navigator的相关知识点。闲言少叙,开始发车。通过本篇博客你可以了解到:1、MaterialApp内置了一个Navigator对象2、一个APP中有多个Navigator对象在调用Navigator.of(context)要注意的事项本篇通过一个demo app来说明Navigator的用法及其细节,在我们的demo中有个四个页

2020-06-11 11:41:11 1794

原创 Flutter之路由系列之Route

Flutter提供了强大的路由管理功能,在这里就来梳理下Route的相关知识点。先来直观的看下Route的家族成员:1、Route的install逻辑咱们先来简单分析下Route,下来看看源码:abstract class Route<T> { RouteSettings _settings; NavigatorState _navigator; List<OverlayEntry> get overlayEntries => con

2020-06-04 17:12:58 1989

原创 Flutter之BottomSheet

在Flutter之SnackBar原理详解详细的介绍了SnackBar的使用极其原理,SnackBar主要功能是提供了一个简单的消息,虽然跟用户有一定的交互。但是其目的主要是提示性消息。且会自动消失。除了SnackBar之外,Flutter又提供了一个BottomSheet,该组件可以在屏幕底部展示了一个可供用户交互功能的页面。通过本篇博文你可以了解到:1、showBottomSheet和showModalBottomSheet的区别2、关闭BottomSheet的方式3、BottomSheet的基

2020-05-29 14:53:52 8762

原创 Flutter之SnackBar原理详解

初次学习SnackBar控件,第一反应就是这货怎么感觉跟Android的Toast一样!使用起来确实简单Snackbar的作用就是在屏幕的底部展示一个简短的消息,与此同时,Snackbar也可以与用户进行交互,实现效果如下图:如上图所示SnackBar分成两个部分:内容区域(content)+交互区域(action)。Scaffold是可以配置底部导航tab的,如果配置了的话,SnackBar怎么展示呢?如下图可以看出SnackBar紧贴着底部导航tab展示:上面两图展示SnackBar的代码如下

2020-05-28 11:18:03 3939 1

原创 Flutter之SafeArea

博主相关资料:Flutter之MediaQuery本篇博文比较简单,用四张图来对比说明下SafeArea的作用!1、未使用SafeArea的代码:Widget build(BuildContext context) { return Container( color: Colors.green,///绿色背景 child: Image.asset( "images/tree.png", fit: BoxFit.fill,///充满全屏

2020-05-25 14:20:26 1404

原创 设计模式之单例模式浅谈

面向对象的世界里,在一个系统或者应用的生命周期中,总会伴随着对象的大量创建和销毁。有的对象生命周期很短,如昙花一现;有的生命周期却很长,跟电视剧的主角一样可以活到最后一集。具有主角光环的这个对象就是单例对象。 单例模式的目的就是确保在系统或应用的生命周期中,一个类Class只有一个实例对象存在。单例对象的特点之一就是该对象生命周期比较长(当然不排除某个子系统内部的使用完毕后就置null),所以应用的各个子功能或者系统都可以访问使用它(前提是该单例对象是public的)。但是这样会有一个内存泄漏的风险,如果

2020-05-20 13:58:55 469

原创 Flutter动画系列之SizeTransition

SizeTransition为尺寸控制动画,其内部核心原理是其child外面包裹着一个Align,然后利用Align的widthFactor和heightFactor的性质,动态的改变父组件的大小,注意是父组件,不是子组件。Flutter之Align和AlignmentGeometry...

2020-05-14 13:35:08 2338

原创 Flutter之MediaQuery详细分析

在学习Flutter的时候时不时会看到这个控件的使用,一直对该组件一知半解。本篇博文就梳理下相关知识点。MediaQuery从源码上看是一个简单不过的Widget:class MediaQuery extends InheritedWidget { /// Creates a widget that provides [MediaQueryData] to its descendants....

2020-05-01 21:22:16 1790

原创 Flutter之RenderObjectWidget

与本篇博文有关的参考资料:Flutter之ParentDataWidgetFlutter之Widget构建过程详解Fultter之Element和Widget对应关系解析Flutter之BuilderContext和Widget关系浅析在Flutter之ParentDataWidget一文中博主分析了ParentDataWidget,该控件和RenderObjectWidget有千丝万缕...

2020-04-27 09:10:07 1755

原创 Flutter之ParentDataWidget和RenderObjectWidget详解

Flutter除了StatelessWidget,StatelessWidget之外还有一类Widget,也就是ProxyWidget:如上图所示ProxyWidget有两个直接子类:InheritedWidget和本篇博文的主角ParentDataWidget.ProxyWidget是什么?正如上文所示,ProxyWidget是ParentDataWidget的父类(废话)。不过从源码上...

2020-04-26 08:56:09 5464

原创 Flutter之EdgeInsetsGeometry简析

没时间解释了,先来一段代码:Container( width: 200, height: 200, color:Colors.red, padding: EdgeInsets.all(10), child: Container( color:Colors.green, ), ...

2020-04-17 16:20:08 3574

原创 Flutter之ScrollView简析

ScrollView是一个抽象类,其具体的子类如下图所示:本篇博文不会过多深入到ScrollView的细节里面,就简单的梳理下其布局流程。既然是有个抽象类,其提供了一个抽象方法: List<Widget> buildSlivers(BuildContext context); 该方法就是用来构建我们的滚动列表的每一项,下面就来分析这个布局方法怎么构建出来的。因为ScrollView...

2020-04-13 09:34:33 3960

原创 Flutter之GridView简析

博主很久之前的这篇文章《Flutter实战之顶部导航栏以及ListView简单应用》简单的写了下ListView的应用,ListView属于Flutter的ScrollView。本篇博文就来简单解析下ScrollView.先来看看ScrollView的结构:本文主要讲下GridView...

2020-04-08 17:19:56 1287

原创 Flutter PageView简析

Flutter中的PageView有点类似于Android中的ViewPager,但是PageView提供了额外的配置,比如PageView既可以支持横向翻页也可以支持竖直翻页。今天就来简单的解析下这个控件。PageView可以通过三种方式来创建:1、通过构造器创建2、通过PageView.custom方法创建3、使用PageView.builder方法创建。通过构造器创建先来看看构造...

2020-03-30 17:42:46 2820

原创 Flutter之Positioned

关于该控件官方注释有这么一句:A [Positioned] widget must be a descendant of a [Stack],A widget that controls where a child of a [Stack] is positioned,意思是一个Positioned的widget必须是Stack的子组件,且Positioned组件的作用是用来控制widget在S...

2020-03-19 15:48:26 5720 1

原创 Flutter之Stack

博主初次接触Stack的时候,第一个感觉就是这玩意不就是跟Android的FrameLayout的效果一样的吗。都可以实现UI的叠加效果。在此简单的分析下这个控件,算是一个简单的学习笔记。看看官方demo给的效果:实现代码如下,简单的实现了红绿蓝三个色块的叠加 child: Stack( children: <Widget>[ Con...

2020-03-17 15:50:34 788

原创 Flutter之Align和AlignmentGeometry

Align是这么一个组件,它可以调整子组件的位置,并且根据子组件的宽和高来确定自身的宽和高!Align对象提供了一个alignment,用来控制子组件在父组件的位置。比如左上角,右上角,左下角,右下角等等。如果不设置的话,默认子组件相对于父组件居中展示。 Container( height: 120.0, width: 120.0, ...

2020-03-11 11:30:18 1947

原创 Flutter之Container 简单分析

Container是一个组合类容器,其设计思路遵循着组合优先于继承原则,它本身是一个StatelessWidget,Container组件持有一个child控件,它的build方法返回的widge是对child控件的包装组合之后的结果。比如child组件通过可能通过Padding,DecorateBex,ConstrainedBox,Algin等容器包装过后,讲包装的形成后的Widget作为bu...

2020-03-10 15:37:37 1120

原创 Flutter之Dialog 简单使用

Flutter 提供了几个Dialog弹框,在这里简单的分析下Dialog,AlertDialog,SimpleDialog如下表所示:名称Widget类型说明DialogStatelessWidget最基本的Dialog类型,里面包含一个child Widget;官方不建议直接使用,可以视情况考虑而使用SimpleDialog和AlertDialog;且设置了最小宽度...

2020-01-07 17:38:52 1919

Android ASM 代码自动化埋点

结合ASM Bytecode Viewer插件,使用ASM技术对Android 的点击事件onClick方法进行插桩。剖析Android 自动化埋点的具体实现原理。在onClick方法执行之前或者之后自动执行指定的代码,可以用来收集用户的点击操作。用来自动化埋点。

2022-04-23

线性贝塞尔曲线的说明

贝塞尔曲线的简单实现算法

2017-02-26

android SDK热修复

android jar热更新机制

2016-11-07

RxJava简单应用

RxJava的简单应用,显示应用列表以及下载文件并更新进度条

2016-06-29

自定义简单GridView

主要是通过这个小小的demo来体会一下view的测量过程

2016-04-03

模仿QQ侧滑删除

简单的应用了ViewDragHelper实现了Qq聊天工具的侧滑删除布局

2016-03-09

QQ侧滑简单实现

2016-03-08

ViewDragHelperDemo

用ViewDragHelper简单的写的测试demo,说明了 clampViewPositionVertical等callback方法的应用

2016-03-04

Scroller简单应用

简单的用Scroller+layout来实现ImageView的平缓移动

2016-02-22

自定义跑马灯次数

实现了TextView控制跑马灯的次数的效果

2016-02-18

控制跑马灯次数的TextView

可控制跑马灯次数的自定义TextView

2016-02-18

自定义导航栏(2)

对之前的版本做了简单修改,丰富了ViewFlipper做导航页面的效果

2016-01-21

自定义ViewFlipper

对ViewFlipper功能做了扩展,响应左右滑动事件进行翻页

2016-01-20

ViewAnimator简单实现PPT

ViewAimator简单实现ppt页面切换效果

2015-12-15

ViewFliper简单实现PPT

用ViewAnimator简单实现了类似ppt页面切换的效果,很简单的代码

2015-12-15

Gson解析流程图

Gson解析流程图,详细的描述了Gson反射机制的解析流程

2015-10-22

自定义横向listView4.0

解决了版本3.0的遗留的问题,并对解决方法尽可能进行了详尽的描述

2015-06-04

自定义横向listView3.0

可左右滚动的横向listView,listView随着手指的移动而移动

2015-06-02

横向的listView version2

在版本1.0的基础上实现了点击滚动的功能,很简单的代码,更过功能在3.0实现

2015-05-20

水平ListView小demo

简单的实现了水平的lsitView,初学者可以看看,大神们可以提点建议

2015-05-17

大风车系列demo

android 自定义View模拟风车旋转的小demo

2015-05-04

坦克大战小游戏

自己做的坦克大战,虽然设计不是怎么合理,还算凑合

2011-11-28

桌面弹球游戏代码以及个人总结

这是我自己写的总结,不是很好,但还凑合,希望对大家有帮助

2011-07-12

控制台简易五子棋java代码

这是java实现的五子棋代码,对于初学者来说很有用

2011-04-28

比较好的Java学习网站

里面是一些学习Java的个人认为比较好的网站,可以利用一下

2010-06-28

空空如也

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

TA关注的人

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