自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(251)
  • 收藏
  • 关注

转载 Rxjava操作符5:repeat、reapeatWhen、repeatUtil

我们都知道 repeat 是重复的意思,也就是说这个操作符就是帮助我们来操作处理一些重复的数据或者操作,repeat 有三个相关的操作符:repeat、repeatWhen、repeatUntil,从字面也很好理解,repeat 就是简单的重复操作,repeatWhen 当达到什么条件的时候重复,repeatUntil 是直到某个条件不在重复。1.repeat举个简单的例子吧,例如我们想重复打印一下 “Hello World!”,我们就可以这么写: private void repeat() {

2021-05-11 11:12:02 5

转载 git使用记录15:修改commit提交信息

有些时候不小心git commit -m ‘提交信息’中的提交信息写错了。不怕,执行如下命令即可修改(注意,仅仅只能针对最后一次提交):git commit --amend -m "新的修改提交信息"

2021-05-08 15:06:19 4

转载 Java基础八:为什么要重写 hashcode 和 equals 方法?

我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过。我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有没有放过自定义对象?而这个时候,候选人说放过,于是两个问题的回答就自相矛盾了。最近问下来,这个问题普遍回答不大好,于是在本文里,就干脆从hash表讲起,讲述HashMap的存数据规则,由此大家就自然清楚上述问题的答案了。1. 通过Hash算法来了解HashMap对象的高效性我们先复习数据结构里的一个知识点

2021-04-24 21:58:49 17

原创 刘海屏、导航栏等

以下内容为开发中的快速记录,不是详细的技术文档,比较粗糙,请见谅!一、刘海屏设置1、布局延申到刘海如果要支持刘海屏在activity的theme针对v27及以上的设置:<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>先把布局延伸到到刘海那边,然后再获取刘海的高度,在代码中调整布局,2.获取是否刘海屏,以及刘海屏高度目前Android各大厂商都有Iphone X风格的刘海屏了,但

2021-04-20 10:34:57 17

转载 StringBuffer和StringBuilder的区别

String、StringBuffer、StringBuilder区别StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringBuffer吧!先说一下集合的故事,HashTab

2021-04-06 15:21:14 7

原创 Gradle打包的一些操作

1、删除assets中的一些不想打包进去的文件:android.applicationVariants.all { variant ->// if (variant.buildType.name == 'release') {//release版本,可以采用多渠道配置 variant.mergeAssets.doLast { //删除assets文件夹下的所有zip文件,或者指定文件 delete

2021-03-23 10:11:56 13

转载 Gradle中implementation、api、compileOnly区别详解

在gadle3.0之后,默认的依赖由之前的compile更改为implementation了。如果我们依然使用compile的话会有如下提示Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools

2021-03-04 14:34:50 152 1

转载 Gradle仓库

什么是Maven仓库在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立一个项目,你都需要建立这样的一个/lib目录,然后复制一对jar文件,这是很明显的重复。重复永远是噩梦的起点,多个项目不共用相同的jar文件,不仅会造成磁盘资源的浪费,也使得版本的一致性管理变得困难。此外,如果你使用版本管理工具,如SVN(你没有使用版本管理工具?马上试试SVN吧,它能帮你解决很

2021-03-04 11:44:12 31 1

原创 Android NDK笔记12:JNI问题总结

1.warning:Reference to stack memory associated with local variable ‘xxx’ returned//出现这个警告的原因是因为,在方法内返回了局部变量的引用:static PointF* getIntersectPoint(){ PointF pointF = Point(1,1,false); return &pointF;}局部变量是位于stack区的,函数结束后这个地址中的数据将失去意义;我们平时经常会

2021-02-24 21:18:12 7

转载 Android Jetpack一: 什么是Jetpack

简介Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。特性1. 加速开发组件可以单独采用(不过这些组件是为协同工作而构建的),同时利用Kotlin语言功能帮助开发者提高工作效率。2. 消除样板代码Android Jetpack可管理繁琐的Activity(如后台任务、导航和生命周期管理),以便开发者可以专注于如何让自己的应用出类拔萃。3. 构建高质量的.

2021-02-08 10:01:03 50 2

原创 Math类的方法总结

1、Math.hypot(double x, double y)计算直角三角形的斜边长,x和y分别表示两个直角边的长度。可以用于计算两个点直接的距离,已知(x1,y1)和(x2,y2)两个点,要获取这两个点的距离:double distance = Math.hypot(x2 - x1,y2 - y1)...

2021-02-07 10:53:11 19

转载 git使用记录14:一个分支直接覆盖另外一个分支

假设每个人有个开发分支,想隔一段时间就把自己的开发分支上的代码保持和测试分支一直,则需要如下操作:1.我想将test分支上的代码完全覆盖dev分支,首先切换到dev分支git checkout dev2.然后直接设置代码给远程的test分支上的代码git reset --hard origin/test3.执行上面的命令后dev分支上的代码就完全被test分支上的代码覆盖了,注意只是本地分支,这时候还需要将本地分支强行推到远程分支。git push -f...

2021-02-04 16:09:13 55

转载 Kotlin学习十:kotlin中生产者消费者模式

Kotlin中有多种方法可以实现多线程生产/消费模型(大多也适用于Java)SynchronizedLockBlockingQueueSemaphoreRxJavaCoroutineSynchronizedval buffer = LinkedList<Data>()val MAX = 5 //buffer最大sizeval lock = Object()fun produce(data: Data) { sleep(2000) // mock produc

2021-02-04 13:45:46 28

转载 Kotlin学习九:kotlin中的异步操作(wait(), notify() 和 notifyAll())

我(原作者)最近开始阅读G. Blake Meike的“Android Concurrency”,到目前为止,我可以强烈推荐这本伟大的书:它包含了很多洞察如何各种Android并发机制的工作,何时喜欢一种方法,以及如何获得最好的工具,在您的处置。我决定遵循代码示例,并在我的电脑上重新创建它们,并且由于我非常爱Kotlin,我认为这将是一个好主意,将示例转换为Kotlin在旅途中。当我开始重写Kotlin中的代码示例时,我非常惊讶地发现:Kotlin中没有synchronized关键字Kotlin中没有v

2021-02-04 11:45:58 184

原创 Android内存优化:内存泄露案例一

单例引起的内存泄露单例在使用的时候,处理不当很容易造成内存泄露,下面是一个使用中造成内存泄露的案例。城市选择器从本地加载数据,为了不每次打开都加载一次,这边使用了单例来管理,只加载一次, fun showCitySelector( activity: Activity, onCitySelectorShowListener: OnCitySelectorShowListener, onCitySelectedListener: OnCitySele

2021-02-02 12:33:05 116

原创 Kotlin学习八:android中kotlin的代码注释

在setting里面搜索BugKotlinDocument插件,安装即可

2021-02-02 10:48:14 40

转载 Android NDK笔记11:JNI的一些概念

1.JNIEXPORT和JNICALLhttps://blog.csdn.net/shulianghan/article/details/104072587

2021-01-30 15:36:13 22

转载 Android 源码三:Android C++中 sp<> wp<>知识

Android中定义了两种智能指针类型,一种是强指针sp(strong pointer),另外一种是弱指针(weak pointer)。其实称之为强引用和弱引用更合适一些。强指针与一般意义的智能指针概念相同,通过引用计数来记录有多少使用者在使用一个对象,如果所有使用者都放弃了对该对象的引用,则该对象将被自动销毁。弱指针也指向一个对象,但是弱指针仅仅记录该对象的地址,不能通过弱指针来访问该对象,也就是说不能通过弱智真来调用对象的成员函数或访问对象的成员变量。要想访问弱指针所指向的对象,需首先通过wp类所提供

2021-01-24 21:00:13 120 1

原创 android studio问题总结

一、控制台编译输出中文乱码双击Shift,输入vmoption,,选择Edit Custom CM Options然后加入一行:-Dfile.encoding=UTF-8然后重启android studio即可

2021-01-21 17:36:27 21

转载 android中访问资源@ ?的区别

概述:@:引用资源?:引用当前主题样式的属性资源区别:1.“资源"和"属性资源”显然资源这个词范围大于属性资源。对于@,存在resource_type为string、color等等的分类;对于?,就只有一个attr(因此语法书写上常省略)。2.当前主题样式一词一般需求下: #000000 #000001这个我们直接@color/mycolor1这样就可以用了。考虑另外一个需求,程序需要切换皮肤,有白天/夜晚模式。上面的方法需要我们手动批量去更改,

2021-01-18 16:18:35 14

原创 git使用记录13:还原文件修改

还原文件,对于Changes to be committed的文件,如删除的文件,使用:git reset HEAD FILENAME对于Changes not staged for commit的文件,使用:git checkout FILENAME

2021-01-16 12:52:01 26

转载 git使用记录12:git add忽略某些文件的方法

命令:git update-index --assume-unchanged FILENAME FILENAME 表示路径+文件名若以后不想忽略该文件的修改,则输入命令:git update-index --no-assume-unchanged FILENAME

2021-01-16 12:45:31 38

转载 git使用记录11:一个branch覆盖另外一个branch

假设每个人有个开发分支,想隔一段时间就把自己的开发分支上的代码保持和测试分支一直,则需要如下操作:我想将test分支上的代码完全覆盖dev分支,首先切换到dev分支git checkout dev然后直接设置代码给远程的test分支上的代码git reset --hard origin/test执行上面的命令后dev分支上的代码就完全被test分支上的代码覆盖了,注意只是本地分支,这时候还需要将本地分支强行推到远程分支。git push -f...

2021-01-12 17:26:00 23

原创 git使用记录10:git命令总结

branchgit branch 查看本地分支情况,及目前所在的分支git branch -a 查看本地和运程的所有分支git branch -vv 查看本地分支与远程分支的关联关系git branch xxx 新建本地分支

2021-01-12 13:26:15 21

转载 Android studio:无法搜索插件

1.解决办法:点击File | Settings | Appearance & Behavior | System Settings | Updates 记住 Use secure connection(不要勾选),如果勾选就取消,然后Restart studio2.以上如果无法解决1打开android studio 的安装路径下的bin 文件找到 idea.properties , 我的路径是:D:\android\studio\bin2.找到并打开打开 idea.properties

2020-12-06 10:19:01 28

转载 java并发之原子性、可见性、有序性

https://www.cnblogs.com/guanghe/p/9206635.html

2020-11-25 21:30:22 18

转载 Kotlin学习九:Kotlin中的“==”和“===”

说明在java中我们经常遇到的面试问题两个String的‘‘和‘equals‘比较的结果,这就是考验大家对String关于‘‘和‘equals‘的理解。在kotlin中出现了一种=的比较两个对象的运算符,今天就来看看‘=‘与‘==‘在kotlin中到底有什么区别。案例直接上代码看看结果Code1 :fun main(args: Array<String>) { val a: Int = 1000 val b: Int? = a val c: Int? = a p

2020-11-20 13:37:22 23

转载 java单例的双重检查锁模式为什么要使用volatile关键字

https://www.cnblogs.com/zhuifeng523/p/11360012.html

2020-11-18 17:57:03 26

转载 java中的CountDownLatch

1.背景:countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。存在于java.util.cucurrent包下。2.概念countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就

2020-11-18 17:13:00 19

原创 git使用记录8:账号和权限相关

查看用户名和邮箱:$ git config user.name$ git config user.email修改用户名和邮箱地址$ git config --global user.name "xxxx"S git config --global user.email "xxxx"git remote: HTTP Basic: Access denied 错误解决办法原因:本地git配置的用户名、密码与gitlabs上注册的用户名、密码不一致。解决方案:如果账号密码有变动

2020-11-17 14:25:51 30

转载 git使用记录7:拉取代码到本地

1、新建一个目录,存放下载下来的项目,我在D盘新建了一个“gitspace”文件夹,用来存放下载下来的项目2、进入刚刚新建的文件夹,即进入“gitspace”,点击鼠标右键,选择"Git Bash Here",如下图:点击“Git Bash Here”之后,可以看到下面界面,否则,可能是你的Git Bash安装有问题3、进行基础配置,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中,使用下面两条命令:  git config --global user.n

2020-11-16 11:04:11 73

转载 git使用记录6: 屏蔽不需要版本控制的文件

有时候一些中间文件不想提交,但是每次commit的时候会显示出来,可以利用git的屏蔽规则对这些中间文件进行屏蔽,有以下几种方式:1、在Git项目中定义 .gitignore 文件新建.gitignore文件:touch .gitignore这种方式通过在项目的某个文件夹下定义 .gitignore 文件,在该文件中定义相应的忽略规则,来管理当前文件夹下的文件的Git提交行为。.gitignore 文件是可以提交到公有仓库中,这就为该项目下的所有开发者都共享一套定义好的忽略规则。在 .giti

2020-11-16 10:43:46 23

原创 android studio:profiler调试闪退

用profiler查看应用信息,闪退的话,可以试下一下操作:

2020-11-10 16:35:22 1147 3

转载 Kotlin学习七:kotlin的单例模式

最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。主要单例模式实现如下:饿汉式懒汉式线程安全的懒汉式双重校验锁式静态内部类式PS:该篇文章不讨论单例模式的运用场景与各种模式下的单例模式的优缺点。只讨论在Java下不同单例模式下的对应Kotlin实现。一、饿汉式实现//Java实现public class SingletonDemo { private static SingletonDemo

2020-11-10 15:34:36 30

原创 Android NDK笔记10:CMake的一些配置

1.指定so文件的输出目录:有时候要把输入的so文件给其他项目使用,系统默认生成的so文件在build底下,层级很深,所以可以通过配置Cmake文件来指定so文件的输出目录:set(CMAKE_LIBRARY_OUTPUT_DIRECTORY CMAKECURRENTSOURCEDIR/../jniLibTemp/{CMAKE_CURRENT_SOURCE_DIR} /../jniLibTemp/CMAKEC​URRENTS​OURCED​IR/../jniLibTemp/{ANDROID_ABI}

2020-11-08 20:09:01 24

转载 Android NDK笔记8:理解静态库与动态库(浅谈静态动态库的区别)

理解静态库与动态库静态库概念静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库特点可执行文件中包含了库代码的一份完整拷贝静态库的代码是在编译过程中被载入程序中缺点就是被多次使用就会有多份冗余拷贝动态库(动态链接库)概念动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数特点函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它

2020-11-08 17:35:23 304

转载 git使用记录5: Git解决本地修改后冲突了无法从远端pull的方法

有时在我们本地修改了部分文件后需要提交代码,这时需要先从远端把代码拉下来(pull),如果你修改的内容跟远端库的修改冲突了,则用git的图形界面用pull操作是无法操作的,这时我们需要用命令行(git bash)的方式来完成代码的更新。1、git status先看下自己修改的文件是哪些;2、git stash用这个命令先把代码缓存起来;3、git pull这时再用pull命令把远端的代码拉下来;4、git stash pop远端代码拉回来后再用这个命令把放到缓存中的代码强行merge

2020-11-03 13:06:16 55

原创 git使用记录4: 从master拉取代码创建新分支 并且再将修改合并到master

一、从master分支copy一个开发分支dev:1.切换到master分支git checkout master2.获取最新代码git pull origin master3.从当前分支拉copy开发分支dev:(新建了一个和master一样的分支Dev)git checkout -b dev4.把新建的分支push到远端git push origin dev5.关联git branch --set-upstream-to=origin/dev6.再次拉取验证git pu

2020-10-30 22:44:29 43

转载 git使用记录3:Git 里面的 origin 到底代表啥意思?

你的代码库(repository)可以存放在你的电脑里,同时你也可以把代码库托管到Github的服务器上。在默认情况下,origin指向的就是你本地的代码库托管在Github上的版本。我们假设你首先在github上创建了一个Repository,叫做repository,假设你的Github ID是user1,这个时候指向你的代码库的链接是https://github.com/user1/repository如果你在terminal里输入git clone https://github.com/us

2020-10-30 22:41:12 36

转载 Android NDK笔记7- extern “C”的作用详解

extern “C”的作用详解extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的

2020-10-21 22:47:03 113

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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