自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

戒不掉的码瘾

业精于勤,荒于嬉;骐骥一跃,不能十步;驽马十驾,功在不舍

  • 博客(90)
  • 收藏
  • 关注

原创 Kotlin之标准库函数

目录applyletalsorunwithtakeIftakeUnlessapplyapply函数可以看做属性配置函数,通过传入一个接收者,通过一系列的函数配置以便使用,如果提供lambda表达式给apply,则返回配置好的接收者对象。class User { var age: Int = 0 var name: String = "" override fun toString(): String { return .

2021-04-20 11:04:35 244

原创 本地项目上传gitlab

用习惯了AndroidStudio的界面化提交代码,git的命令总是记不住,在此记录1、初始化本地仓库$ git init2、本地与远程仓库连接$ git add remote add origin (上传仓库地址)3、本地文件添加$ git add .4、提交添加文件$ git commit -m "描述"5、上传远程仓库$ git push -u origin master6、如果远程仓库有redmine等文件会报错: ! [rejected]

2020-09-18 13:51:11 213

原创 uni-app学习之旅(五)uniCloud使用

1、创建项目,勾选2、确认应用的应用标识appID已经获取3、创建云服务空间4、创建云函数,右键创建以后要上传云函数5、打开uniCloud web控制器6、云函数调用uniCloud.callFunction({ name:"getUsers", success(res) { console.log("调用成功",res) }})7、云函数介绍云函数是运行在服务器端的函数,运行在云端的node.js中。8、云数据库操作'u

2020-07-27 10:57:58 6862

原创 uni-app学习之旅(四)自定义组件

自定义组件以简单的button为例:1、组件实现 我们实现一个简单的按钮<template> <view提交 </view></template><script></script><style></style>2、在页面使用组件<template> <view class="content"> <!-- 3、使用 -->...

2020-07-24 14:12:07 964

原创 uni-app学习之旅(三)开发环境搭建

安装运行HBuilderX官网下载https://www.dcloud.io/hbuilderx.html如果是开发APP最好选择App版下载,里面已经集成了我们开发需要的开发包。创建项目:文件——>新建——>项目——>uni-app——>选择模板——>创建运行:运行——>运行到浏览器——>选择我们要运行的浏览器使用vue-cli的方式运行项目node安装:打开控制台win+R cmd 检测是否安...

2020-07-24 10:30:27 260

原创 uni-app学习之旅(二)uni-app开发规范

1、页面遵循vue单文件组件的规范(SFC)页面和vue一样也是由3大块组成:template、script、style2、、组件标签靠近小程序规范(先体验一下微信小程序还是有用滴)3、接口能力(Js Api)靠近微信小程序规范uni已经封装好了一些api可以直接调用来获取手机的一些状态,如//获取网络类型uni.getNetworkType({ success() { }})4、数据绑定及事件处理同Vue.js规范5、为兼容多端运行,建议使用flex

2020-07-24 09:31:40 1202

原创 uni-app学习之旅(一)微信小程序

uni-app虽然使用的是vue语法不是小程序语法,但无奈本人android出身完全零基础vue和小程序,在此强行上车还是希望都学习一哈。1、微信小程序开发准备工作首先下载微信开发者工具https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html安装完成后微信扫描登录2、微信小程序项目创建AppID如果想体验的话可以直接使用测试号创建3、微信小程序项目结构介绍 pages文件夹:存放所...

2020-07-23 10:46:29 699

原创 Jetpack入坑(二)LiveData源码分析

LiveData是一个可观察的数据存储器。它可以通过观察者Observer与LifecycleOwner配对来感知数据依附组件的生命周期状态,只会把更新通知发给活跃的观察者,所谓活跃就是观察者处于STARTED或者RESUMED状态而没有DESTROYED。既然是数组存储器,他是如何更新数据呢LiveData有postValue()和setValue()方法去更新数据。postVal...

2020-04-27 12:27:10 210

原创 Jetpack入坑(一)Lifecycle基础理解篇

Jetpack已经出来很久了,然而我才......(一万个理由已经备好)。学习Android之初,最先接触的就是Activity,学习了她从哪里来到哪里去,了解了她的一生。在Jetpack中组件的一生是靠Lifecycle来管理。以下示例代码均基于AndroidX+Kotlin。Lifecycle是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,...

2020-04-26 13:29:59 361

原创 ARouter(二)Kotlin和Java配置

我们在使用Arouter进行组件化开发时,可能是多人开发有人用Java有人使用Kotlin,在build.gradle配置时有一定的差别,在此记录:Java版:if (isModule.toBoolean()) { apply plugin: 'com.android.library'} else { apply plugin: 'com.android.applica...

2020-04-16 14:38:46 523

原创 集合(三)HashMap源码分析

集合(一)扒掉ArrayList的外衣集合(二)走进LinkedList的内心集合(三)HashMap背后的故事前两篇学习了ArrayList和LinkedList的源码,一个是数组一个是双向链表,今天一起来看看HashMap(Jdk1.8)。HashMap的数据结构是什么样呢我们直接先看其put方法来看它是把数据放在什么结构内的。这里我们看有一个hash(ke...

2020-03-31 10:28:00 157

原创 集合(二)LinkedList源码分析

LinkedList是什么?* Doubly-linked list implementation of the {@code List} and {@code Deque}* interfaces. Implements all optional list operations, and permits all* elements (including {@code null})....

2020-03-30 14:33:08 119

原创 集合(一)ArrayList源码分析

ArrayList是什么?颤抖的小手敲开门ArrayList的大门,发现她竟然是Object[] elementData数组。我们知道数组的长度是有限制的,那ArrayList是如何实现的ArrayList构造函数有无参和有参,无参...

2020-03-27 11:12:55 119

原创 Android面试(一)Java虚拟机内存结构分析

1、Java虚拟机内存结构模型Java虚拟机内存模型区域分:JVM堆、方法区、虚拟机栈、本地方法栈、程序计数器。JVM堆:所有线程共享的运行时内存区域,是GC回收的主场所,Java堆保存Java的实例对象,从内存回收对象的存活来分析,堆又可以分为新生代、老年代。方法区:方法区是线程共享的运行时内存区域,存储虚拟机加载的类的结构信息,如常量、方法、属性字段、静态变量等。虚拟机栈:线程...

2020-03-17 18:03:04 231

转载 Java多线程:彻底搞懂线程池

熟悉Java多线程编程的同学都知道,当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了。目录1 线程池的优势2 线程池的使用3 线程池的工作原理4 线程池的参数4.1 任务队列(workQueue)4.2 线程工厂(threadFactory)4.3 拒绝策略(handler)5 功能线程池5.1 定长线程池(FixedThreadP...

2019-08-16 16:14:16 209

原创 Gradle配置apk命名

打包时间获取//getTimeZone(id)这个id可以是GMT+8:北京时间 也可以是所在城市 我这里是杭州def releaseTime() { return new Date().format("yyyyMMdd", TimeZone.getTimeZone("Asia/Hangzhou"))}在android{}下applicationVariants.a...

2019-08-16 10:09:55 368

原创 Kotlin之anko实现页面跳转

1、startActivity不带参:startActivity<XXXActivity>()带参:startActivity<XXXActivity>( "key" to value,"key" to value)2、startActivityForResult不带参:[email protected]...

2019-08-12 16:33:45 782

转载 Android反编译apk

一、准备必要工具  工欲善其事,必先利其器,首先我们要下载好反编译apk时需要的相关工具1.1、使用工具apktool(资源文件获取) dex2jar(源码文件获取) jd-gui(源码查看)1.2、工具介绍  apktool     作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看  dex2jar     作用:将apk...

2019-08-05 11:07:15 148

原创 adb命令安装apk到手机

1、首先手机连接电脑 验证是否连接成功:win+R打开运行,输入cmd打开dos命令窗口,输入命令adb devices会展示所有连接的device2、安装apk 手机连接成功后,输入adb install (apk路径)\(apk名字).apk...

2019-08-05 09:36:58 443

原创 Android8.0实现版本更新解析包错误

在实现8.0以上App版本更新时遇到解析包错误问题排查:第一步:权限 AndriodManifest.xml文件<!-- 8.0 android安装 --> <uses-permission android:name="android.REQUEST_INSTALL_PACKAGES.GET_TASKS" /> <uses-permis...

2019-07-25 14:46:19 1500

原创 哈夫曼(Haffman)编码

哈夫曼编码又称赫夫曼编码,是赫夫曼为了解决当年远距离通信(主要是电报)的数据传输的最优化问题提出的。哈夫曼编码是一种可变字长的编码方式,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。哈夫曼树如何绘制哈夫曼树呢?假设我们在网络传输一段文字CADABCADAEFC,一般会转换为二进制0和1进行传输。字母 A B C D E F二进制 ...

2019-07-22 11:16:49 2309

转载 Android图片压缩详解

简介由于工作原因,boss下达的任务就大概说了对图片进行压缩寻找比较合理的方式,还举了一个项目中的坑,就是系统原生的Bitmap.compress设置质量参数为100生成图片会变大的坑。所以我打算用一点时间研究研究Bitmap在内存和外存中的情况。首先需要对图片进行压缩,大家都知道图片是Android里面一个大坑,具体的问题有oom,一不留神就用OOM来冲冲喜,所以网上就有了很多解决oo...

2019-07-18 10:54:00 406

转载 Android插件化——Small框架

0x01 前言Android插件化框架一直以来就是安卓平台上的一个重要技术方向,从携程的DynamicAPK到360RePlugin再到阿里巴巴的Atlas,甚至美团和滴滴的安卓团队都有自己的一套安卓插件化解决方案。面对业界如此热门的技术方向,在对比业界开源的插件化方案后,团队内部于去年10月份开始(2017.10)在项目中选择开源的Small插件化框架进行了尝试。鞋是否合适需要穿上脚才能知道...

2019-07-13 13:10:31 908

原创 BLE蓝牙 onCharacteristicChanged()不回调问题

Android低功耗蓝牙开发,onCharacteristicChanged()怎么也不回调,原因查找:1、查看蓝牙服务特征的Properties是否为 PROPERTY_NOTIFYint properties = characteristic.getProperties();//162、BluetoothGattDescriptor写入是否正确BluetoothGattDe...

2019-07-10 16:59:32 5639 10

转载 Android 低功耗蓝牙开发

初识低功耗蓝牙Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)的核心功能并提供了相应的 API, 应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等操作。Android BLE 使用的蓝牙协议是 GATT 协议,有关该协议的详细内容可以参见蓝牙官方文...

2019-07-04 14:12:26 2547 1

原创 JVM、Dalvik和ART

JVMJVM是Java Virual Machine(Java虚拟机)的缩写,是在实际计算机上仿真模拟虚构出来的的计算机。JVM是Java程序运行的容器同时也是操作系统的一个进程。JVM在整个JDK中处于最底层,负责与操作系统的交互,用来屏蔽啊哦做系统环境,提供一个完整的Java运行环境。JVM能够运行通过编译器编译成Java字节码文件的编程语言。JVM执行程序的过程:加载...

2019-06-03 16:31:43 589

转载 三次握手和四次挥手

三次握手握手之前客户端处于 closed 的状态,服务端处于 listen 状态。第一次握手:客户端给服务端发一个SYN报文,并指明客户端的初始化序列号ISN(c),此时客户端处于SYN_SEND状态。服务端收到该SYN报,服务端可以确认客户端的发送能力和服务端接收能力正常;第二次握手:服务器收到客户端的SYN报文之后,也指定自己的初始化序列号ISN(s),同时会把客户端...

2019-05-31 10:00:48 156

原创 ARouter(一)简单使用

demo场景:app模块主页面分别跳转购物车模块页面和个人中心模块,个人中心模块跳转主界面和购物车模块,购物车模块跳转个人中心模块和主界面框架地址:ARouter使用步骤:1、在项目的build.gradle文件中2、分别在module的build.gradle中填加(如果某个module没有填加会报错There is no route match the path)...

2019-05-30 14:49:52 2172

原创 Java位非~运算符详解

在java中int数据类型一般是四个字节,一个字节8位,一个完整的int类型是32位。在计算机内是以二进制进行存储的,计算机在存储某个数据时,是存储的数据的补码。补码与原码关系:正数补码与原码相同,负数补码是原码减1后取反。例如:5原码是:00000000 00000000 00000000 00000101补码是:00000000 00000000 00000000 0000...

2019-05-29 11:06:34 4317 1

原创 Java位运算符

1、位异或(^)运算规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。例如:3^53的二进制:00115的二进制:0101计算结果二进制:0110 十进制:62、位与(&)运算规则:两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。例如:3&53的二进制:00115的二进制:0101计算结...

2019-05-29 09:28:12 128

翻译 Android蓝牙

蓝牙Android 平台包含蓝牙网络堆栈支持,凭借此项支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。 这些 API 允许应用以无线方式连接到其他蓝牙设备,从而实现点到点和多点无线功能。使用 Bluetooth API,Android 应用可执行以下操作: 扫描其他蓝牙设备 查询本地蓝牙适配器...

2019-05-28 16:59:36 550

原创 Android组件化之gradle配置

1、统一管理SDK以及依赖的版本 gradle是用groovy语言编写的,也可以在gradle中定义变量打印值输出,我们可以在项目中新建一个gradle文件来定义sdk以及应用包名等。ext { //false:组件模式 true:集成模式 isModule=false android = [ compileSdkVersion...

2019-05-24 22:16:00 882

原创 冒泡排序、插入排序和简单选择排序

冒泡排序一次比较两个元素,如果他们的顺序错误就把他们交换过来 /** * 冒泡排序 */ @Test public void bubbleSort() { int[] array = {3, 5, 2, 1, 6, 8}; int temp;//交换时记录中间值 for (int i = 1; i &l...

2019-05-24 15:13:19 282

原创 动脑不会老之口+口+口=30

本身是个所谓的玩笑题,然后采用刚了解的算法写个程序来计算,还是采用按位对应法,获取一个数组的所有长度为3的子序列,具体分析参见获取数组的所有子序列 @Test public void add() { int[] array = {1, 3, 5, 7, 9, 11, 13, 15}; int length = array.length; ...

2019-05-24 13:35:41 2320

原创 Flutter探索之旅(一)AndroidStudio创建Flutter项目

Flutter是谷歌开发的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作,并且Flutter是完全免费、开源的。如何创建自己的Flutter项目?官网地址:https://flutter.dev/docs/get-started/install1、系统要求,本文是window10系统Git安装:Git for Wind...

2019-05-21 11:38:12 472

原创 获取数组的所有子序列

一个包含n个元素的集合,获取其所有子集,可以采用按位对应法,例如:int[] array = {1, 3, 2, 5};这个集合可以看做1325四位,每一位在子集中要么存在要么不存在,是否的操作我们就考虑二进制的01:一位子序列的情况有: 1000 0100 0010 0001 ——》{1} {3} {2} {5}二位子序列情况有: 1100 1010 1001 0110 ...

2019-05-13 16:10:55 9309 3

原创 Activity生命周期启动流程启动模式

Activity1、activity启动流程:————》点击App的icon————》在Laucher的onClick方法中,调用startActivitySafely方法(Laucher继承于Activity)————》startActivitySafely方法中携带一个intent,intent中包含着我们在AndroidManifest.xml注册的 ...

2019-05-07 09:22:58 294

原创 Error: Activity class {} does not exist.Error while Launching activity解决方法

在调试程序时有时候卸载APP之后在运行一直报错启动Activity不存在解决办法:1、打开命令窗口2、输入adb uninstall 包名3、success之后,重新运行即可...

2019-05-06 15:23:09 1217

原创 GreenDao问题收集

1、no such table解决方法一:删除卸载应用重新安装解决方法二:build中升级数据库版本2、解决办法:此问题出在一对多的时候,在getList调用前给对象设置session。3、Error:Execution failed for task ':app:greendao'.> Can't add field `Variable(type=VariableTy...

2019-04-30 17:26:27 692 1

原创 性能优化(二)内存优化

说起内存我们要先了解JAVA虚拟机JAVA虚拟机java虚拟机在运行程序时会在内存空间分配一块区域用于程序的运行,虚拟机又会把这一块区域划分为若干个不同的数据块线程私有:程序计数器、虚拟机栈、本地方法栈;共享数据区:方法区、java堆。程序计数器相当于一个执行代码的指示器,用来确认下一行执行代码的地址,每个线程都有一个,没有OOM的区。虚拟机栈:我们平常所说的栈...

2019-04-28 14:58:40 1428

空空如也

空空如也

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

TA关注的人

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