- 博客(123)
- 资源 (5)
- 问答 (2)
- 收藏
- 关注
原创 Go语言实战 读书笔记
这篇文章是我看《Go语言实战》时记得备忘录,如果有不对的地方,请大家指正。go语言定性Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。GO是静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。Go 语言是一种静态类型的编程语言。这意味着,编译器需要在编译时知晓程序里每个值的类型。如果提前知道类型信息,编译器就可以确保程序合理地使用值。这有助于减
2021-01-08 11:21:39
431
原创 DecimalFormat 在多语言环境下的crash及解决方案
问题场景当使用decimalFormat传入字符串参数进行格式设置,但是需要注意字符串是会根据语言环境自动进行修改的,在某些特定的语言环境下,字符串会变成意想不到的结果。比如波斯语,阿拉伯语,德语演示代码DecimalFormat df = new DecimalFormat("0.0000");String res = df.format((float) 1 / itemCount);在德语环境下".“会被自动修改成”,"导致df.format函数报错在阿拉伯语环境下"#"会被自动修改成别
2020-08-21 11:20:31
888
原创 简单工厂模式 工厂模式和抽象工厂模式
看了其他人的很多博客,死记硬背了很多术语,表达的时候总是有问题。念念不忘,终有回想,某一刻,灵光闪现,总结了几句这三种工厂模式的描述,可以供大家参考简单工厂模式在业务逻辑里面根据参数直接new不同的数据,也就是数据层和逻辑层直接交互工厂模式工厂模式,就是在数据层和业务逻辑中间加了一层,通过工厂类new具体的数据对象,返回给逻辑层抽象工厂模式其实就是在工厂模式的基础上,把多个类型的数据...
2020-04-30 11:02:22
318
原创 快速生成单例代码模版
目的最好的程序员一定是最懒的程序员,当你厌烦了敲样板代码,不想让宝贵的时间浪费在已经滚瓜烂熟的语句,那么不妨试一下使用模版代码。效果原理实际就是用了android studio自带的liveTemplate功能。步骤首先打开Settings->Editor->Live Template->点击红色圆圈处新增将以下代码复制到 Template text:编辑框中...
2020-03-12 20:55:37
417
1
原创 maven publish aar 打包第三依赖方法
问题描述aar打包到maven库之后,引用的时候发现报错,具体原因是aar包中的第三方库的类没有找到。问题分析:通过maven库引用aar包,之所以可以引用第三方依赖库,是因为同时打包生成的pom文件中包含了对第三方库的依赖,如果pom文件中没有对应依赖,则在使用方会报ClassNotFound异常。解决方案:既然知道了造成问题的原因,方案就很简单了,在生成pom文件的时候同时打包对应的...
2020-03-02 15:05:10
3403
1
原创 RxJava 错误处理操作符知识点总结
RxJava的错误处理机制感谢 RxJava 错误处理操作符(Error Handling Operators)RxJava中的错误处理操作符分为两种,catch,retryJava把Throwable分为两种,a. 一种是比较严重的系统问题,Error,比如OutOfMemoryErrob. 另外一种是异常,Exception,比如RuntimeException。c. 使用...
2020-01-06 14:52:38
347
1
原创 Unable to find method 'org.gradle.api.tasks.TaskInputs.file
在配置greenDao项目的时候,经常会遇到这样的问题,全部的提示如下Unable to find method ‘org.gradle.api.tasks.TaskInputs.file(Ljava/lang/Object;)Lorg/gradle/api/tasks/TaskInputs;’.Possible causes for this unexpected error includ...
2019-11-06 11:41:58
5920
原创 检查json字符串用gson反序列化之后是否有空对象
使用场景gson转换之后的对象如果不经过检查就使用,很容易导致空指针错误。json中的每一个数据都单独做检查,就会导致代码冗长,而且不利于维护,因此我做了一个小工具,用来在gson对字符串转换完成之后进行校验,避免在使用对象的过程中出现问题。原理主要利用的是反射的方法,使用getClass()函数获得对象的类型,getDeclaredFields函数可以获得这个类的所有成员变量,包括私有的变...
2019-05-31 10:30:55
1100
原创 6个关键问题解析 HTML Builder
主程序代码fun main(args: Array<String>) { val result = html { head { title { +"HTML encoding with Kotlin" } } body...
2019-05-16 16:38:08
363
原创 RxJava学习笔记
RxJava学习RxJava学习笔记是什么异步比喻:就好比警察和小偷,警察是观察者,小偷是被观察者,小偷实行偷窃的行为就是事件,警察给小偷进行了改造,导致小偷在偷窃的时候就会通知警察过来抓捕优点简洁四大组件observable,被观察者observer观察者,subscriber观察者subscribe,订阅操作onNext,onError,onComplete,也就是事...
2019-04-17 18:26:55
273
原创 从xml布局文件映射到自定义View的两种方法
使用xml进行布局,然后映射到自定义View中进行事件绑定是现在最常用的画UI的方式。我一直以来的做法是,在java类的构造函数中inflate布局文件中的view,然后使用this.addView(view)的方法或者在inflate函数中进行关联。最近一个同事的做法让我发现还存在另外一种做法,虽然本质上差不多,但是中间涉及到的一些知识还是值得注意的。不知道你在开发过程中使用的是哪一种方式...
2019-04-17 18:23:01
1502
原创 TextView使用占位符设置内容
strings.xml 占位符作用:可以节省textview的个数,减少消耗。使用步骤strings.xml <string name="my_info">我叫%1$s,%2$d,不信可以%3$s一起玩!</string>layout.xml<TextView android:layout_width="wrap_content" android...
2019-04-17 17:49:50
833
原创 gradle使用笔记
gradle使用杂项minifyEnabled 表示不混淆,通常情况下,debug模式要设置为falsegradle导入aar步骤复制aar包到libs文件夹在应用的gradle文件中添加repositories { flatDir { dirs 'libs' }}在dependencies里面添加如下行,其中的yourAARfileName是你的aar包的...
2019-04-17 17:15:29
219
原创 numpy多维数组shape的理解
想了很多都没有找到简明的描述,找规律的话,大家一看就明白了(2,3) 表示两个一维数组,每个一维数组长度为3(2,3,4) 表示两个二维数组,每个二维数组有3个一维数组,每个一维数组长度为4(2,3,4,5) 表示两个三维数组,每个三维数组有3个二维数组,每个二维数组有4个一维数组,一维数组长度为5...
2019-03-29 15:43:51
2871
2
原创 Android使用Glide给图片加锯齿效果
效果,给图片顶部加上矩形图层思路:使用小型的图层重复来模拟锯齿状图形Glide版本:4.9.0Glide.with(this).load(bitmap) .transform(new SerrationTransformation(MainActivity.this)) .into(imageView);temp的示例:...
2019-03-01 18:29:42
1496
原创 Canvas Bitmap Paint 学习总结
Android开发者文档中关于绘图的描述The Canvas class holds the “draw” calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a...
2019-03-01 16:29:36
299
原创 解决vhr项目windows部署中文乱码的问题
前言windows安装之后运行其中的vhr.sql运行起来之后发现,部分中文乱码。归结原因,是windows的cmd命令行和powershell用的字符集是gbk,而vhr用的字符集是utf8。没有办法,只能创建了虚拟机把database服务器部署在了虚拟机里面。然后在主机上进行访问,
2019-01-10 22:13:55
529
原创 RxAndroid 学习笔记
这篇博客是学习RxAndroid过程中做的笔记,学习的博客为优美的异步nicolelili1的Rx相关文章概念FuncX X表示参数个数emit 发射retrofit 改造&lt;? extends T&gt;表示上界通配符,表示T和它的子类&lt;? super T&gt;表示下界通配符,表示T和它的父类响应式编程A=B+C A经过赋值之后,如果B的值改变了,A的...
2019-01-07 15:40:04
359
原创 android aidl使用方法和原理
AIDL设计原因跨进程通信IPC,以及跨进程调用RPC。节省工作量AIDL中的实现工具为了达到这个目的引入了IInterface,IBinder以及Binder类IInterface是什么:IInterface是一个interface,定义了一个asBinder函数。联想到什么:IInterface接口一定是和Binder一起使用的。/** * Base class for ...
2018-12-07 18:18:38
683
原创 从源码看Handler和Runnable Thread 以及HandlerThread的关系
Handler的构造函数Handler是Android中的概念,其构造函数有以下几种public Handler();public Handler(Callback callback);public Handler(Looper looper);public Handler(Looper looper, Callback callback);public Handler(boolean...
2018-11-29 18:14:58
243
原创 Service生命周期
Service生命周期相关函数onCreate()onStartCommand()onBind()onUnbind()onStop()onDestroy()两条线Bind和Start线bindService是为了在Activity中直接调用Service中的公共函数startService函数的作用是通过intent传消息调用service中的私有函数使用Bind时的...
2018-11-29 12:27:02
958
1
原创 在activity中调用service中的函数
不多说,直接上代码MainActivity.javapackage com.xxx.validatedemo;import android.app.Activity;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android....
2018-11-28 17:41:35
2579
原创 android 触点轨迹绘制(代码)
onTouchEvent函数:单点触控处理流程event是通过event.getAction()获得的,一般最少需要考虑下面这三种情况MotionEvent.ACTION_DOWN:手指 初次接触到屏幕 时触发。MotionEvent.ACTION_MOVE:手指 在屏幕上滑动 时触发,会多次触发。MotionEvent.ACTION_UP:手指 离开屏幕 时触发。多点触控ev...
2018-11-28 15:52:43
2767
原创 android sudio 3.0版本之后怎么查看函数消耗时间
3.0版本之后,曾经很好用的TraceView和DDMS没有了,Google更新了Profiler,但是很多功能的入口变得更深了,这里我说明一下新版本中查看函数运行时间的方法。首先点击如下图标打开Profiler,在程序中设置断点点击如下位置进入CPU模块开始录制,然后在断点结束,停止录制打开Top Down,选择Wall clock time查看各个函数运行所需的时间如图所示,sl...
2018-11-26 21:09:23
1391
1
原创 自定义View通过findviewbyid返回为null解决方法
findviewbyid 返回为null,这个问题一般说明想要找的view没有在对应的layout上面。今天遇到一个同样的问题,但是确定view已经在layout上,但是仍然返回为null。虽然最终找到了问题原因,但是过程艰辛。具体代码如下MainActivity.javapublic class MainActivity extends Activity{ @Override...
2018-11-21 15:35:59
5335
1
原创 C++ 代码和变量存储位置
栈:程序自动分配,编译器在需要的时候分配,不需要的时候自动清除的变量存储区堆:程序员手动分配由new分配的内存,需要自己在程序里面手动释放常量存储区:存放的是常量,不允许修改,编译时分配,程序退出时才销毁全局/静态存储区:全局变量和静态变量存储的地方,编译的时候分配内存,程序退出的时候才会销毁。这个区域的中存储的变量早就被默认为0。代码存储区:函数体等代码存储位置...
2018-11-16 17:03:08
1161
原创 c++ time相关知识
文章目录基本关系相关函数time()asctime()gmtime()localtime()ctime()mktime()settimeofday() 和gettimeofday()相关数据结构和结构体time_ttime_strtmtimevaltimezone实例基本关系time_t&tm&time_str之间的关系相关函数time()time()是最重要的一个函数...
2018-11-16 16:54:29
307
原创 C++ Binder机制学习
核心内容Binder机制的核心实际上和Android中的Handler发送消息的机制很像,在Binder中负责发消息的是继承了BpInterface的子类,负责处理消息的是BnInterface的子类发送消息的具体函数是remote()-&amp;amp;amp;amp;amp;amp;amp;gt;transact();处理消息的具体函数是onTransact();基础知识BpInterface和BpBinder中的p表示的意思就...
2018-11-08 22:58:15
2501
4
原创 C++ 多线程pthread 学习笔记
本篇是我在学习C++多线程的时候做的笔记,主要记录的是基础的流程,部分代码实例,以及部分重点函数的说明。pthread 入口函数类型说明void * func1(void * t)void* 表示无类型指针void*作为函数参数,表示函数接收一个指针,不管是什么类型的指针都可以,但是传递之前要强制转换为无类型指针。基础流程pthread_t t1;//声明一个线程pthread_c...
2018-11-07 17:02:49
7730
4
原创 char数组和char指针的使用区别和一些注意事项
const用法const char* p;表示p是一个指向常量字符的指针char* const p;表示p是一个指向字符的常量指针,p是不允许改变的另外要注意的是const char* p等价于 char const *p也就是说const描述char和*p是等价的char* p的内存分配方式char* p_char=“123”;上面的代码相当于是在常量区存储一个"123",然后...
2018-11-07 11:33:48
7367
原创 C++ 字符串转换
头文件#include &lt;string&gt;#include &lt;stdio.h&gt;c_str()函数C++标准库中的函数,作用是把字符串转变为字符数组以兼容C语言(C语言中没有string类型)atoi()函数C/C++标准库中的函数,作用是把字符串转换为数字,里面传递的是C里面字符数组,因此,如果是C++字符串,需要用c_str()函数进行转换类似的还有atof...
2018-11-06 10:21:01
1252
原创 使用char指针赋值引发警告deprecated conversion from string constant to ‘char星’
最近在做demo的时候遇到如下警告。warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]参考代码为:#include <stdio.h>#include <string>using namespace std;int main(){ char...
2018-11-06 10:17:29
1189
原创 指针和引用 作为函数参数
*和&amp;* * 有两个作用,一个是作为标识符来表示这是一个指针(声明变量时的等号左边),也就是说存放的是地址,另外一个是作为运算符来取值(赋值等号左边)。int *p=NULL;int a = 1;p = &amp;a;cout&lt;&lt;p&lt;&lt;" "&lt;&lt;*p&lt;&
2018-11-05 18:23:11
9509
1
原创 source insight 快捷键列表
快捷键可以在Options->Key Assignments里面对快捷键进行设置,这些快捷键很多都没有设置按键。你可以把配置好的快捷键导出之后放到其他设备上使用。我常用的快捷键快捷键说明对应快捷键删除整行ctrl+d选择整行alt+1跳转到文件搜索界面ctrl+o跳转到行尾end跳转到行首home跳转到文件末尾ctrl+end...
2018-10-26 11:17:45
2837
原创 函数模版和类模板的使用
templatetemplate用于重载(overriding),目的是让形参类型不同的函数可以共用一个类名或者函数名。最简单的使用,对一个函数进行重载,参数是可变的原型:template &lt;class identifier&gt; function_declaration;NOTICE:&nbsp;&nbsp;T也可以作为函数的返回值进行设置,并不一定是参数。例子:#...
2018-10-24 20:47:02
637
原创 类构造函数初始化列表
表现形式有三种当前类进行初始化,尤其是当成员变量是一个const或者一个引用类型class Demo{ private: int a; public: Demo(int a):a(a){};}需要在初始化列表中调用外部类成员的初始化函数#include &amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;gt;using namespace std;...
2018-10-24 20:31:45
337
原创 宏定义的用法
有五种用法,含有参数和不含参数,行尾都不用加分号#define &amp;nbsp; &amp;lt;标识符&amp;gt;&amp;nbsp; [&amp;lt;替换列表&amp;gt;]//类似于全局变量了//如果其他文件没有包含定义宏的文件,则在宏定义的位置结束,如果有包含,则到包含的文件结束#define LARGEST_NUM 1000#define &amp;nbs
2018-10-24 20:29:02
909
原创 C++中函数的动态绑定
所谓动态绑定,其实就是接口的实现由派生类完全覆盖。就是说原本声明的类型是基类B,但是调用函数的时候执行的却是不同派生类(由初始化或者赋值的时候定义)D的函数。动态绑定出现的条件有两个只有虚函数才能进行动态绑定。必须通过基类类型的引用或指针进行函数调用。例子#include &amp;lt;iostream&amp;gt;using namespace std;class Base{ p...
2018-10-24 20:22:23
943
原创 gcc工具使用
预编译,编译,汇编操作-E进行预编译操作,生成.i文件,注意,这里的.c文件是main函数所在的文件cc -E test.c -o test.i-S只进行编译操作,不进行汇编,生成汇编文件gcc -S test.i -o test.s-c进行汇编操作,把生成的汇编文件转为二进制的目标文件gcc -c test.s -o test.o链接操作(1)静态链接:在这种链接方...
2018-10-24 20:18:33
896
转载 init.rc 官方文档
这篇文章是从8.0的安卓源码中拿出来的,源码位置是o-base/system/core/init/README.mdAndroid Init LanguageThe Android Init Language consists of five broad classes of statements:Actions, Commands, Services, Options, and Impor...
2018-09-27 14:37:19
683
apk反编译工具包
2016-09-23
Android反编译套装
2016-09-23
Viewgroup中添加了scroller后getScrollX什么时候改变
2016-08-31
Java多线程 final和static变量
2016-08-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人