- 博客(36)
- 收藏
- 关注
原创 dart语言基础_变量声明
当然,其实也不需要怎么学习,因为你会在dart语言中发现许多其它语言的影子,可以说是集百家所长,颇有某企鹅的风范。dynamic这就是真正的无类型了,您可以在任意时候赋值为您希望的任意类型,且编译器均不报错。请注意,我只是说编译器不报错,如果您的程序在数据处理上类型不匹配,那您应该好好检讨下自己的逻辑哦。数据之间的转换是必不可少的,嗯,其实与java比较类似,只是得益于一切皆对象的理念,转string的时候写着舒服点。从最基本的变量类型开始,最基础的如int类型,其参考并完善了java的设计。
2022-12-17 19:49:08 654 1
原创 JetPack之LifeCycle设计模式与解耦艺术的极致运用
但设想下我们有几十甚至上百个页面的时候,这套设计所需要的接口及其维护成本有多大,其中某个页面生命周期监听发生异常的时候,是否保证这个页面涉及功能修复后其余页面不会出现类似的问题?是的,这2个接口就是LifeCycle的关键,接下来,我们围绕监听是如何添加及监听是如何被调用这两条线展开今天的源码之旅。还记得我们在添加的时候也封装了ObserverWithState这个类吗,这里面可是有我们的LifecycleObserver的。那么,我们接下来看下当生命周期发生变化的时候,又是怎么通知到观察者的。
2022-11-27 17:03:01 743 1
原创 关于设计模式的学习与思考
这就引出了对设计模式的思考,到底什么是设计模式,有没有完美的设计模式。是的,所有的设计模式都是为了达到某种目的的一种代码写法,而这种写法其本身没有优劣或完美之说,如果非要说其优劣那么也一定是需要依托于具体的业务场景,否则就有点耍流氓的感觉了。包含模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式、访问者模式。1、常规设计模式的用法,这个是基础,补充我们的见识,基础的23种设计模式是为了让我们知道常规的写法有哪些,在不同的场景下该怎么用。
2022-10-09 17:14:32 362
原创 注解与APT实现Butterknife
接上篇我们用注解加反射的方式实现了类似Butterknife的效果,但反射的效率实在不敢恭维。那在进行框架设计的时候我们是否有更好的方式来处理这种需求呢,答案非常明显是有的。今天我们就用APT来代替反射实现该功能。APT:Annotation Processing Tool,是javac的一组工具,中文为译注解处理器。其功用是在进行javac编译时,将我们关注的行为摘出来供我们在编译时进行操作。如下图:ok,我们今天要实现的效果还是与上篇效果一致,不清楚的可以去上篇温习下。注解与反射实现Butterkn
2022-07-11 19:41:03 190
原创 注解与反射实现Butterknife
在Android开发中,在初始化的时候需要查找控件、为控件设置监听,因此我们经常会写如下的代码。这种代码初看非常合理,这不是Android开发的固有套路么。但设想一下,要是页面的控件有几十个,需要设置的监听有几十个。嗯…是不是就感觉没那么科学了呢?随着技术的发展,Butterknife横空出世,解决了需要写一堆类似的代码的问题。相信做了一定时间的大家都用过这个库吧,非常的好用。今天我们先来用注解+反射的方式实现一个我们自己的Butterknife。声明:该文章仅是为了体现注解的妙用和架构的思维,这种性能是
2022-07-08 20:28:03 202
原创 设计模式:代理模式
什么是代理模式?为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。以上为百度百科对代理模式的定义。嗯,有点拗口,也不太好理解。那么我们换一个通俗点的例子:我们去餐厅吃饭,点了一盘大盘鸡。做这道菜的肯定是餐厅的厨师对吧,但是厨师人家做的技术活,才不想直接跟这些个食客当面聊呢,人家也是很高傲的,所以呢就由餐厅的服务员与食客做对接,由服务员将我们的需求传递给厨师,厨师做好了之后在由服务员传递到食客桌上。这
2021-11-12 17:41:17 1852
原创 一起学Kotlin(9)_扩展函数
在刚接触Kotlin的时候,扩展函数无疑是给我留下印象最深的功能之一。当时虽然不太明白是怎么回事,但这种扩展的写法确实可以节约大量的代码以及文件文件数,而且使用起来就好像是类自带的一样,特别的舒服。今天在来系统的过一次,在更深入和全面一些。设想一下,在Java中我们如果需要对系统的一些类加一些功能或者方法,我们一般可以通过继承来实现。但要是这个类不让继承呢?还有我们为了方便一般会定义工具类实现一些静态的方法,比如我们需要替换字符串中的某个字符为特殊字符,怎么处理?一般来将是在我们的工具类中去实现,但调用起
2021-06-17 17:24:52 343 2
原创 一起学Kotlin(8)_接口、抽象类、泛型
接口、抽象类、泛型,这些在Java中我们都是常见且经常使用的,相信大家都不会陌生了。这里我们就看下它们的异同吧。一 接口Kotlin规定所有的接口属性和函数实现都要使用override关键字,接口中定义的函数并不需要open关键字修饰,他们默认就是open的。1.1 接口的定义及实现interface Movable{ val maxSpeed:Int var wheels:Int fun move(movable: Movable):String}class Car(_
2021-05-21 19:28:54 406 1
原创 一起学Kotlin(7)
A同学:没有对象,好孤单啊,怎么办?B同学:new 一个不就好了嘛!这是一个网络段子,也算是工(程)程(序)师(猿)的一种独特的对话。对象,在程序世界一般指实际可操作的主体,是某抽象的具体化实例。比如我们的游戏角色,我们可以理解为一对象,其实是在角色基础上针对特定用户进行的一个具例,有所有角色的共性,也有单一角色的个性。在Kotlin中也离不开对象,但又有其独特的语法。Let`s go!一 类对象1.1 Object关键字产生单例object ApplicationConfig{ ini
2021-05-08 11:46:50 165 1
原创 一起学Kotlin(6)
类:类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。[摘自百度百科]在Java中可以说我们将类用得非常熟练了,那么在Kotlin中类与Java有什么不同呢?今天我们从类的定义、初始化、继承的异同来一谈究竟。一 类定义1.1 创建一个类class Player{ }与Java一样,使用class关键字 后面跟
2021-04-30 16:35:47 745 2
原创 一起学Kotlin(5)
预告:在程序的世界里,集合是一个无法缺少的类型。要是没有集合,很难想象面对一大堆相同类型的数据,我们该如何管理和使用。同Java一样,Kotlin里也有List、Set、Map等相关集合类型,但它们的使用又有自己的独到之处。Let`t go !集合:可以方便你处理一组数据,也可以作为值参传递给函数,和我们学过的其它变量类型一样。List、Set和Map类型的变量也分为只读和可变两种。一 List集合1.1 List的创建与获取创建一个List非常简单,使用listOf函数即可创建一个List。与Ja
2021-04-27 18:42:47 357
原创 一起学Kotlin(4)
上节学习了变量的可空与非空类型的定义,以及如何进行操作。那么对于字符串、数字的相关操作与Java有多大区别呢,有哪些常用的函数呢,一起开始本节的学习。一 字符串操作字符串可以说是我们平常操作得非常多的类型之一,显示、截取、拼接、变化等等。1、substring字符串截取,substring函数支持IntRange类型的参数,until创建的范围不包括上限值。val str = "Hello World"val index = str.indexOf('d')println("size=${s
2021-04-20 18:15:27 207
原创 一起学Kotlin(3)
本节主要学习下空安全,在Java中经常会被空指针异常玩得死去活来的,那在Kotlin中又是如何处理的呢,Let`s go!在Java中,我们经常会被NullPointerException折磨,带来了许多麻烦,编码经常需要战战兢兢,以至于我听到了部分人员提出了不管什么时候在使用之前都必须要判空的逻辑,嗯哪怕是上一步进行了new的操作后一步使用也要判空的逻辑感觉有点过了,但可见被NullPointerException毒害之深。那么Kotlin作为更强大的语言,势必会基于以往的语言设计经验对其进行改良。Ko
2021-04-20 15:13:09 382
原创 一起学Kotlin(2)
来吧,这节接着来学习Kotlin的匿名函数。要是对变量、函数定义、条件语句还不太清楚的可以看下前一篇:Kotlin基础(1)1、匿名函数定义时不取名字的函数,我们称之为匿名函数。匿名函数通常整体传递给其它函数或者从其它函数返回。val total = "Nice To Meet You".count()val toatlL = "Nice To Meet You".count({letter-> letter == 'l'})println(total)println(toatl
2021-04-19 16:36:34 99
原创 一起学Kotlin(1)
从google扶正Kotlin为Android开发的第一语言后,越来越多的项目开始使用Kotlin。虽然Kotlin与Java在某些地方存在一些相似的语法,而且AndroidStudio支持将Java转化为Kotlin的操作。但其实Kotlin也有其独特的语法和一些细节,补充基础语法和细节就显得尤为必要,否则在真正的项目中有的是不会用或者看不懂的。那么就开始这一系列基础的学习吧!1、声明变量var maxNum:Int = 10对应顺序:变量定义关键字 变量名:变量类型 = 值Kotlin的数据类
2021-04-19 14:45:46 163
原创 Android Application创建流程
我们在进行应用开发的时候,在程序初始化或者引用第三方的一些库的时候,都要求进行一些初始化工作。而这些初始化工作一般都要求传入一个上下文,为了不引起内存泄漏,传入的上下文会是一个ApplicationContext,而初始化工作我们一般都会放入Application的onCreate里面。但其实一直以来我都不明白这个Application是在时候进行创建的,onCreate又是在什么时候进行调用的。今天就带着这些疑惑来深入学习下Application的创建过程。首先,我们要明确我们APP程序整个程序的入口点
2021-03-16 14:10:59 916
原创 Android之Hook AMS实现集中登录管理
学无止境,学以致用。在实际开发中,需求是随着业务的发展不断变化的。以登录来说,看似简单,但随着业务性质的不同,其场景需求就会不断发生变化。比如微信、QQ这种,他们是强登录的类型,就是在应用开启的第一步就是必须先进行登录的动作,否则无法使用后续的功能。但如淘宝、京东这类软件,用户只是先浏览商品,在加入购物车或者下订单、购买等环节才需要登录,如果这种类型的软件也做成一进来先必须要登录的话明显是不合理的。但问题也随之而来,以加入购物车为例,用户浏览完商品,点击加入购物车,发现用户未登录,那么跳转到登录页面进行
2021-03-07 14:42:35 636 2
原创 Android之PMS流程分析
作为Android开发者,我们经常会听到PMS这个词汇,但更多时候我们不知道PMS到底是什么,以及PMS到底有什么用。PackageManagerService是PMS是全称,可以译为包管理服务类。理解该服务的流程,有利于我们更进一步的了解Android系统以及系统启动的时候做了什么。让我们带着以下问题开始今天的PMS之旅吧!1、我新机开机很快的,为什么后面越来越慢了2、google每次都说对某个版本的系统启动速度进行优化,到底优化了什么3、一个APK文件是怎么被解析以及运行的4、为什么需要Andr
2021-02-27 15:09:01 3240
原创 Activity启动流程(基于Android10附关键代码及流程图)
我们在平常开发的过程中,想启动一个Activity怎么办?startActivity(Intent intent)就可以了,这是一个简单得不能在简单的问题了。但如果问你启动一个Activity具体经过了哪些步骤,即时在同一App内调用startActivity是否用到了进程间通信呢?是不是有点蒙,我一个App内启动一个Activity还会用到进程间通信,要搞基(什么)?那么,我们就具体来看一看吧,也许这种知识在99%的开发中我们都不可能会用到,但多了解一些对我们也没什么坏处吧。先上一张启动调用图吧,有点乱
2020-06-24 18:38:53 733
原创 Android使用自己的字体库让你的APP更漂亮
Android系统是一个相对开放的系统,在我们平常开发的时候有时候会直接使用原生的控件更换下背景图片。如果想让我们的APP变得大漂亮,那么我们会对UI进行深度定制,变成我们所希望的那样。而一个APP的大漂亮除了UI的漂亮,很多时候字体也是影响大漂亮的因素之一。最近在开发中就有客户的需求是数字要显示为那种液晶仪表盘的那种方正一些的样子。OMG,可难为死我了。试了下Android自带的字体库,支持三种字体:Sans、serif、monospace,然后试了下。格劳资滴,看不出太明显的变化嘛,更别说要满足客户的
2020-06-19 15:03:57 2014
原创 Android之AOP打造权限申请框架
一、概念AOP,既熟悉又陌生的名称。相信只要在IT相关的这个行业混的,或多或少都在一些地方看到或者听到过这个词汇。是Aspect Oriented Programming的缩写,翻译过来的意思就是面向切面编程。莫子呢?啥子意思哦?是的,与我们大众所熟悉的OOP感觉又有那么一丝相似的味道,因为都带P吗,而且很多时候我们就喜欢P多的。比如PPP,PPPP,哈哈,跑题了,其实他们所描述的都是一种编程思想。好了,回归正题。先列出我们听到AOP的时候所浮现的一些问题。1、AOP到底能帮我们干什么?2、AOP到
2020-06-13 11:50:33 787
原创 ArrayList源码学习笔记
ArrayList作为我们平常使用最多的容器之一,有必要深入了解下它了。在查看其源码之前,我们先抛出以下问题,带着问题我们更具有目的性。1、ArrayList的本质是什么?2、ArrayList的使用是否会出现OOM?3、ArrayList是否线程安全?4、ArrayList的使用过程中,做了哪些事情?5、ArrayList的效率如何,适用于哪些场景?其实针对第一个问题,我们看真正存储我们数据的容器就可以猜测得到了。transient Object[] elementData;是的,其实A
2020-05-29 15:29:37 261
原创 Handler源码学习笔记
Handler是我们在Android开发过程中经常会使用到或者与之打交道的一个类,比如我们会在子线程发起网络请求,然后到主线程进行UI的刷新。虽然现在有很多能够自由进行线程切换的相关库,比如RxJava,但了解Handler的原理还是很有必要的,也能够帮助我们更好的去使用相关库,其中的设计思想也特别重要。 1、Handler是如何创建的? What?这也太简单了吧,看我们平常经常写的一段代码 private Handler handler = new Handler(){ @..
2020-05-22 17:35:08 198
转载 自定义控件相关知识(转载)
自定义控件所需掌握的相关知识点https://blog.csdn.net/harvic880925/article/details/50995268包括动画、绘制、视图3大部分转载链接,以做记录。可按照里面的相关知识自己走一次,会明白很多东西。...
2020-03-03 15:09:06 106
原创 日常效果之Activity转场效果(一)
Android中Activity页面转场,分为5.0之前和5.0之后。当然5.0之前的转场用法在5.0之后依然适用。本次我们先介绍下5.0之前的转场效果,5.0之后的将在下次进行介绍。 其实5.0之前的转场动画是通过`public void overridePendingTransition(int enterAnim, int exitAnim)`这个方法来实现转场效果的。其中第一个参数为进...
2020-01-13 13:56:54 343
原创 AndroidStudi处理gitignore中已被误提交的文件
在AndroidStudio中有.gitignore作为git的忽略配置文件。但有时候由于某些原因将本该忽略的文件不小心提到了远程仓库,这时候就需要更改本地的配置文件并删除远程仓库中的文件。但如果对已加入版本管理的文件直接添加.gitignore进行忽略的话是不会起作用的,需要取消本地仓库与远程仓库的这种关系重新关联才起作用。而我们的远程仓库一般我们只能拿到某个网页的浏览,如果不小心提交了...
2019-09-29 16:02:12 257
原创 Java之值传递与引用传递
引言在面试的时候,一般会有部分java基础部分的面试题。而一般会有问输出结果的题目,其考察的是面试者对java中值传递和引用传递的理解。那么,今天我们就来聊一聊java中的值传递与引用传递。首先,在java中数据类型分两大类:基础数据类型和引用数据类型,请看下图:首先,我们通俗的表述下什么是值传递和引用传递。值传递:在传递的过程中是将值直接传递过去,接收者拿到的是实际的值,相当于拷...
2019-08-21 17:56:41 182
原创 Android之折叠悬浮
我们的Android手机的屏幕是十分有限的,怎么在有限的屏幕展示足够多的内容一直是我们不懈的追求。而折叠悬浮效果正是这个需求的实现,且兼顾了美观。话不多说,先上效果图。 内容大致分两部分,当完全展开的时候,上半部分展示标题,且可展示额外的如背景图、头像等信息。下半部分是可滚动的控件或包含可滚动控件的控件(如ViewPager)。而还有一个特殊的部分是当折叠的时候会停留下页面顶...
2019-08-15 14:51:11 888
原创 Android使用ThreadPool
线程池(ThreadPool):一种线程使用模式。 What?不(什)知(么)所(东)谓(东)。那么首先我们得了解什么事线程,线程一般理解为我们顺序执行某一任务的最小执行单元,同一时间只做一件事情。而线程的创建和销毁在系统里面是有开销的,而且还比较大。 我们来想想我们使用线程的方式一般为new Thread() 这样做是有很多弊端的,1、创建线程是有开销的 2、线程的生...
2019-08-13 15:47:55 313
原创 Android开发之注解
Annotation:注解 Java提供的一种源程序中关联信息或元素的方法。注解只能被动执行,永远不可能有主动行为。 元注解:注解注解的注解。中华文字的博大精深在此刻体现得无比的精妙了,哈哈。元注解有以下:@Retention:注解保留的作用范围。取值枚举RetentionPolicy@Documented@Retention(RetentionPolicy.R...
2019-06-10 18:01:26 653
原创 Android反射调用
反射,是指在运行状态动态获取新的或动态调用对象方法的功能。 使用场景:需要调用私有的属性、方法。我们的对象是不能调用其私有的属性或方法的,但在一些特定的场景,我们又需要使用其属性或者方法,那这时候反射就派上用场了。比如有时候我们会引入第三方的SDK ,但我们是没有其源码的。有一天我们发现需要调用其中的一个私有方法去做点事情(至于做什么事请自行脑补)。 我们来模拟一个这样...
2019-06-05 15:40:48 7196
原创 Android之Builder建造者模式
在我们日常研发中,建造者模式是使用的很多的一种模式。其实很多时候我们在不知不觉中就使用了别人设计的建造者模式而从中受益。比如Gson、okHttp、Retrift。如下代码:Gson gson = new GsonBuilder() .registerTypeAdapter(String.class,new StringAdapter()) .regi...
2018-10-27 10:11:01 351
原创 Gson之TypeAdapter
在研发工程中,当我们与服务器进行数据交互的时候,会定义数据格式,而Json是十分常用的格式。而对Json的格式化也是我们常要用到的,一般我会引入第三方框架来帮助我们进行解析工作。如Gson、fastJson、jackson等。 有时候,由于前后台一些数据格式的不一致或者默认值的不一致,会导致解析失败或者解析出来的数据我们在使用的时候有问题的情况。通常我使用Gson比较多,所以这里...
2018-10-26 15:25:10 5943
原创 Android中的单例模式(包含Java、Kotlin)
在Android开发工程中,单例模式可以说是我们使用得非常频繁的设计模式了。常见的写法有5种:饿汉式 懒汉式 同步锁 双重校验 内部类下面我们对这5种写法的Java、Kotlin各自举例。调用统一由Kotlin调用(其实差别并不大)一、饿汉式java:public class BaseSingleton { private static final Stri...
2018-10-12 14:40:45 346
原创 Kotlin中使Companion object不被混淆
用Kotlin进行Android开发时,单例模式也是用得比较多的场景。由于Kotlin中没有static关键字,创建类的单例一般会使用Companion objct来进行创建。代码如下:class BleApi private constructor(){ private object BleApiHolder{ val instance = BleApi() } c...
2018-10-10 16:56:42 6796 1
原创 Android Studio Terminal使用gradle命令
在Android Studio的Terminal我们是可以直接使用命令的,但需要一些配置。比如我们直接在里面输入gradle会提示“xxx”不是内部或外部命令,也不是可运行程序或批处理文件。这是因为我们没有配置gradle的环境变量。 首先找到我们使用的版本,版本会在.gradle\wrapper\dists下,我们所有的使用过的都会下载在这里。进入我们的电脑属性,进入环境变量的配置...
2018-03-21 11:04:21 6412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人