
web
文章平均质量分 68
grenZh
博观而约取,厚积而勃起
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UML之6种关系的解释与画法
1.依赖关系,A类是B类的一个变量,B类持有A类的一个引用。依赖其实定义非常模糊,所以使用依赖只应该是在其他关系无法表示的时候:2.泛化关系 就是java中的继承3.关联关系,分为单项关联,双向关联和自关联,默认创建关联关系是双向关联。关联暗示了依赖,与依赖的最大区别在于:关联类通常作为一个类成员变量存在 与依赖相似,关联用来表示无法用聚合和组合表示的关系 举例:学生...原创 2020-02-25 13:22:56 · 452 阅读 · 0 评论 -
UML之逆向工程与正向工程工具篇
PowerDesigner可以帮我我们创建UML的oom图,既可以逆向工程---oom类图导成Java文件,也可以正向工程---Java文件导成oom类图。他的具体使用可以参考下一篇博客。本篇介绍如题的解决步骤:1.首先需要一个powerdesigner的文件包,里面需要有破解文件与汉化文件,真的需要可以留言找我要。解压后文件夹目录如下:.2.在第一里面直接选择安装,需要选择安装...原创 2020-02-25 13:00:55 · 1449 阅读 · 0 评论 -
热修复的简单原理
原创 2020-02-24 21:30:49 · 234 阅读 · 0 评论 -
Andoird的apk构建流程与组成结构
原创 2020-02-24 21:28:42 · 309 阅读 · 3 评论 -
Synchronized(对象锁)和Static Synchronized(类锁)的区别
Synchronized和Static Synchronized区别通过分析这两个用法的分析,我们可以理解java中锁的概念。一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线程都共享该锁)。实例锁对应的就是synchronized关键字,而类锁(全局锁)对应的就是static synchronized(或...原创 2020-02-24 21:26:11 · 557 阅读 · 0 评论 -
巧用buildconfig切换常量
应用中有个需求,对于不同分支版本的appkey是不一样的值。为了让library不用新建分支,我们通过在主feature的分支下进行参数配置,主feature分支不同,则对应的appkey的值是不一样的。具体的操作方法如下:1.主分支所在的project的buidle.gradle中:ext { romAppsOutDir = "${rootProject.rootDir}/ro...原创 2020-02-24 21:24:30 · 314 阅读 · 0 评论 -
Java虚拟机运行时数据区域
这儿的 程序计数器没有oom的情况常用的jvm堆内存的垃圾标记算法与垃圾收集算法如下。垃圾标记算法:常见的垃圾清除算法的分类如下:标记清除算法,需要遍历堆内存,产生大量内存碎片垃圾收集算法之复制算法,内存一分为2,每次使用一半,减少内存碎片,但是内存使用总量变小了。垃圾收集算法之标记-压缩算法: 压缩存货的对象在一端,然后回收内存。分代收集算法...原创 2020-02-24 21:22:11 · 152 阅读 · 0 评论 -
android配置charles进行抓包
因为图片无法正常上传,copy的原因,所以直接贴上链接了,实操可用的。https://app.yinxiang.com/fx/153fcf0e-1ce8-4d74-b872-658d0b4feb27原创 2019-12-19 19:58:50 · 219 阅读 · 0 评论 -
好用的adb,gradle等
1.查看当前打开的是哪个activityadb logcat | grep "ActivityManager"2.打开和关闭设备的WiFi链接adb shellsvc wifi disablesvc wifi enable3.iterm快速切换文件夹cd +"空格"+tab4. ./gradlew app:dependencies 打印依赖树...原创 2018-11-27 18:28:37 · 248 阅读 · 2 评论 -
彻底弄懂LayoutInflate.inflate()中三个参数与两个参数的意义
https://blog.youkuaiyun.com/u012702547/article/details/526284531.三个参数的inflate方法方法头如下:public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)a.resource用于代表本次生成的vi...转载 2018-07-27 11:47:59 · 3453 阅读 · 0 评论 -
关于Android中的Scheme
参考了:https://www.cnblogs.com/newcj/archive/2011/08/11/2135094.htmlhttps://blog.youkuaiyun.com/xc765926174/article/details/51397847https://blog.youkuaiyun.com/u013252110/article/details/56841698https://blog...转载 2018-07-20 17:29:46 · 670 阅读 · 0 评论 -
嵌入u3d页面导致的界面绘制不充分问题的解决
嵌入了u3d的布局,可能会产生view不绘制或者绘制不充分的问题。这时需要再布局文件中设置控件的显示属性为visiable,同时给它的上层布局中设置一个只有一个像素的imageview。绘制不充分问题大多数是因为上层的布局有一些页边距导致的。...原创 2019-01-18 21:18:54 · 201 阅读 · 0 评论 -
位运算替代直接数字运算的一些例子
博客来源于https://blog.youkuaiyun.com/tonysong111073/article/details/79480495位运算到底有什么用途或者有哪些场景可以应用到它。因为位运算的运算效率比直接对数字进行加减乘除高很多,所以当出现以下情景且对运算效率要求较高时,可以考虑使用位运算。不过实际工作中,很少用到它,我也不知道为什么很少有人用它,我想应该是它比较晦涩难懂,如果用它来进行一些...转载 2018-07-18 14:35:09 · 997 阅读 · 0 评论 -
RelativeLayout布局的对齐属性
android:layout_above 将该控件的底部至于给定ID的控件之上android:layout_below 将该控件的顶部至于给定ID的控件之下android:layout_toLeftOf 将该控件的右边缘和给定ID的控件的左边缘对齐android:layout_toRightOf 将该控件的左边缘和给定ID的控件的右边缘对齐android:layout_alignBasel...转载 2018-12-06 22:42:54 · 2263 阅读 · 0 评论 -
TextView的一些属性
属性名称 描述 android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) android:autoText 如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。 android:bufferType 指定...转载 2018-12-06 22:44:19 · 201 阅读 · 0 评论 -
博客里的gif是如何实现的
1.录制手机屏幕adb shell screenrecord /sdcard/test.mp4有限制的录制屏幕(30秒分辨率为1080*1920)adb shell screenrecord /sdcard/demo.mp4 --size 1080*1920 --time-limit 302.退出录制ctrl+c3.把手机中的文件推送到当前目录adb pull /sd...原创 2019-01-17 20:02:57 · 278 阅读 · 0 评论 -
如何加载别人的老项目
开发中我们总是会需要借鉴前辈的作品或者demo来创作自己的作品,github上开源的android项目,很多都是年久没有维护的,引入本地也总是会编译不通过。具体的情景有如下几个原因:1.项目的build.grade使用的gradle编译工具版本有所不同。2.gradle-wrapper.properties里面的gradle版本使用不同。关于如何下载与放置gradle编译工具与对应版本...原创 2019-01-18 11:04:18 · 255 阅读 · 0 评论 -
Glide如何控制Gif的暂停与继续播放
项目中需要控制Gif的暂停与继续播放,万能的glide框架竟然没有提供现成的api,想破头脑,最后在公司架构师提供的一个网页链接中找到了答案。https://github.com/bumptech/glide/issues/1916代码很少,会者不难,难者不会Glide.with(context).asGif().load(list.get(position)).apply(opti...原创 2019-01-24 21:19:46 · 8400 阅读 · 6 评论 -
Mac下repo,gerrit的配置与sync代码
Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git。要详细了解 Repo,请参阅开发部分。要安装 Repo,请执行以下操作: 1.确保主目录下有一个 bin/ 目录,并且该目录包含在路径中: mkdir ~/binPATH=~/bin:$PATH 2.下载 Repo 工具,并确保它可执行: curl https://storage.goo...原创 2019-09-18 20:41:53 · 681 阅读 · 0 评论 -
Glide4.4的用法
最大的不同,就是曾经的链式调用现在需要放在了RequestOptions中,eg:final RequestOptions options = new RequestOptions();options.centerCrop() .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE) ...原创 2018-05-03 21:22:07 · 754 阅读 · 1 评论 -
关于计算机中的原码补码和反码
数值在计算机中是通过补码的方式存储的,补码是一种特殊的机器数,通过最高位来确定是否为正数,0代表正数,1代表负数,这儿涉及三个概念,原码,反码,补码;在计算机中,根据编码的方式不同,每一个字符都有其对应的编码,也有其对应的编码表中的整型位置,每一个位置,对应了一个二进制的表示方式,从而让计算机实现了字符的展示,以上是对应于字符型数据的处理。对于整型数据,在java中,有五种整型的类型,by...原创 2018-07-18 11:11:11 · 883 阅读 · 0 评论 -
一些功能代码块
1.隐藏输入法 public static void onInactive(Context context, EditText et) { if (et == null) return; et.clearFocus(); InputMethodManager imm = (InputMethodManager) context.getSystemS...原创 2018-07-16 17:55:51 · 262 阅读 · 0 评论 -
包管理器activity管理器
以下是这个主题的几个常用的知识点:1.在自己的app打开已知包名的应用Intent resolveIntent = getPackageManager().getLaunchIntentForPackage("com.tencent.mm");// 这里的packname就是从上面得到的目标apk的包名// 启动目标应用startActivity(resolveIntent);2.拿到Acti...原创 2018-05-25 20:46:26 · 306 阅读 · 0 评论 -
android混淆
应用开发完了,测试没问题了,快上市场了,这时候就要混淆加固多渠道打包加上线了,所以,混淆就来了:混淆是什么,就是把类名,方法名,变量名给弄成简单的单词或者字母来代替,从而防止别人反编译后轻松的得到源码。与其说我们配置混淆,不如说我们来配置哪些包里面的哪些类不要被混淆,也就是在下面的那个文件里声明一下,哪些不要给我混淆:1.在module的build.gradle的android标签里buildTy...原创 2018-05-25 20:29:46 · 442 阅读 · 0 评论 -
简单集成bugly
1.在module的build.gradle里面//buglycompile 'com.tencent.bugly:crashreport:latest.release'//其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9compile 'com.tencent.bugly:nativecrashreport:latest.releas...原创 2018-05-25 20:22:19 · 338 阅读 · 0 评论 -
Android使用HttpUrlConnection来实现网络请求,亲测有效
产品提出需求,需要再视频播放完毕后把当前的播放位置上传给服务器。作为一名不爱造轮子的程序员,我果断的使用了三方的视屏播放器,以module依赖的形式导入到了工程,也由此产生了一个问题,三方module没有Application的,也就无法进行集成OkGo来进行简单的网络请求了。这里插入一句,在主module里通过调用辅助module的方法来给三方实现okGo的初始化为什么不可以呢?回归正题,于是我...原创 2018-04-27 21:34:30 · 1225 阅读 · 0 评论 -
android实现用户头像上传七牛云存储
因为后台为了数据安全,他们就集成了七牛的一套api,而我们移动端只需要发送一些简单的http请求,就可以把需要保存的东西上传到了七牛云了,当然,中间需要我们和服务器打交道拿到一些东西,就如下面这一张图片所表达的:这里面有一个需求是很陌生的,就是移动端需要以表单的形式提交网络请求,什么叫表单的形式,下面的是七牛给的例子://需要上传的表单的样式// <form method="post" a...原创 2018-05-03 21:34:16 · 663 阅读 · 0 评论 -
IO流的的简单使用
好久没有写java的io流的,回顾一下,BufferedWriter和BufferedReader是字符流的包装类,可以轻松的实现读取一整行,也可以在写的时候,轻松换行。OutPutStream和InputStream是字节流的基类抽象类,FileInputStream和FileOutPutStream是字节流的基类抽象类。字节流方便于音视屏,图片等的传输,但不适用于字符的传输,因为编码的原因,有...原创 2018-05-09 20:07:55 · 226 阅读 · 0 评论 -
Mac下配置tomcat
1.登录Apache Tomcat官网,地址 http://tomcat.apache.org ,点击左边的Download,选择需要下载的版本。2.存放到本地文件夹重名民为Tomcat,放到/Users/计算机名/Library/目录下,访达,前往目录,"~/Library"3.打开终端,进入tomcat\bin目录,然后执行chmod 777 *.sh,用于解决Mac os Linux 下的T...原创 2018-04-06 12:07:47 · 214 阅读 · 0 评论 -
我理解的Handler,messageQueue,Looper,Messager,HandlerThread.
Handler里几个重要成员的关系原创 2017-10-15 08:55:41 · 465 阅读 · 0 评论 -
在tomcat上部署本地服务器
1.把war包放在tomcat的webapp目录下,执行打开tomcat的命令就自动实现了war包的解压了。这儿说两个事情,第一,war包就是一个服务器的应用程序的压缩包,在MyEclipse中点击项目的Export->以war包的形式导出就生成了我们可以自己部署的war包了。tomcat本身就是一个服务器,一个容器,可以解释执行服务器端的程序。第二,mac电脑打开tomcat与window...原创 2018-06-11 22:17:29 · 685 阅读 · 0 评论 -
Android快速实现Lanmbda支持
1.在project级别的build.gradle中加上classpath 'me.tatarka:gradle-retrolambda:3.7.0'2.在module级别的build.gradle中加上apply plugin: 'me.tatarka.retrolambdaretrolambda { javaVersion JavaVersion.VERSION_1_6}3.build一...原创 2018-05-30 11:29:42 · 246 阅读 · 0 评论 -
配置vue的工作环境
公司让我快速入门前端,三天的时间,现在需要搭建vue,硬着头皮就干了,本文借鉴了https://www.cnblogs.com/miller-star/p/6394760.html但是细节上还是有一些不一样。1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html)2.基于node.js,利用淘宝npm镜像安装相关依赖 在...原创 2018-06-28 14:29:33 · 323 阅读 · 0 评论 -
关于gradle和iterm的一些事情
一.gradle plugin 下载后在本地的/Users/pc/.gradle/daemon下载地址是 https://jcenter.bintray.com/com/android/tools/build/gradle/二.gradle 下载后在本地的/Users/pc/.gradle/wrapper/dists下载地址是 https://services.gradle.org/dis...原创 2018-06-27 11:36:47 · 240 阅读 · 0 评论 -
Mac上进行Flutter的安装,配置与问题解决
1.从官网上下载下来flutter,下载下来的包中是有.git的,所以不影响日后的拉取与更新。https://flutter.io/setup-macos/2.配置环境变量,在mac的 .bash_profile文件中加入如下配置,第一个是flutter在你机器中的地址#flutterexport PATH_TO_FLUTTER_GIT_DIRECTORY=/Users/pc/Library/An...原创 2018-06-26 18:22:17 · 2014 阅读 · 0 评论 -
AS无法安装plugin和安装后重启提示没安装上的解决
一.无法安装plugin进入Prefreence->Appearance&Behavior->System Settings->Updates,然后取消勾选右侧的"Use secure connection"二.安装重启后提示安装失败这是intellig本身的问题,解决方法在谷歌搜索到的,如下:Please follow these steps and you will ...原创 2018-06-26 16:16:32 · 1098 阅读 · 0 评论 -
android实现切换夜间主题的方法
我知道两个方法来实现切换夜间主题的功能。分别借用了如下两篇优秀的文章及其代码:https://blog.youkuaiyun.com/qq_23383563/article/details/52493320http://blog.youkuaiyun.com/u012572538/article/details/387265491.用android系统V7包自带的主题切换方法2.自己定义白天和夜间的样式,根据sp里存储的...原创 2018-06-26 11:27:28 · 776 阅读 · 0 评论 -
线程池用法的总结
Executor是顶级接口,内部只有execute方法。ExecutorService是真正的线程池接口,继承于Executor。ScheduledExecutorService继承于ExecutorService,也是一个接口,用于解决重复任务执行的问题ThreadPoolExecutor,是一个实现类,实现了ExecutorService。ScheduledThreadPoolExecutor...原创 2018-06-18 22:23:04 · 168 阅读 · 0 评论 -
Sublime Text3进行HTML开发的配置
1.下载最新的sublime,输入如下的激活码—– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 94D7F7D4 95BC8C1C 527DA828 560BB037 D1EDDD8C ...原创 2018-06-29 18:45:42 · 10032 阅读 · 7 评论 -
Git使用教程
总论:Git是一个强大的分布式版本控制工具,其最大的特点就是可以轻松的创建分支,细化到每一个bug的修复。从而保证了每一次的项目迭代,都不影响上一次已经发版的版本,有利于敏捷的开发方式。下面,我就总结一下常用的git命令:一.创建1.git init: 在某个文件夹路径下输入该命令,自动产生git版本控制文件夹2.vi <文件名>: ...原创 2018-06-14 16:49:19 · 212 阅读 · 0 评论