自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 几种导致内存泄漏的常见错误

几种导致内存泄漏的常见错误Broadcast Receiver等未进行unregister例如:当你在Activity中register broadcast receiver,假如你没有unregister the broadcast receiver,及时你关闭了Activity,仍然会持有Activity的引用静态变量持有Activity、View或者大数据对象例如:无论什么原因你生命...

2020-04-02 11:03:39 629

原创 线程池ThreadPoolExecutor简介

线程池ThreadPoolExecutor简介线程池的实现方式java中实现线程池的类主要是ThreadPoolExecutor这个类主要的构造方法有来看一下最全的构造方法 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Blockin...

2019-12-05 10:38:32 184

原创 Mac配置oh my zsh,并使用ITerm2

Mac配置oh my zsh,并使用ITerm2先看看最终效果第一步安装on my zshsh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"切换为zsh sudo chsh -s /bin/zsh更换主题在命令行用vim打开用户根目录下...

2019-11-15 15:25:16 299

原创 详解Handler机制

Handler详解文中源码基于API 28,且部分有删减Handler有什么用? 为什么要用Handler?Android应用程序运行时会创建一个主线程就是我们常说的UI线程,而更新UI的操作只能在主线程进行.但是实际开发中,一些网络请求和耗时操作都要到子线程中进行,获取到执行结果之后想去修改]UI是不行的,所以Android设计了Handler,通过消息的机制来实现线程之间的通讯.为...

2019-11-14 20:27:55 208

原创 Flutter底部导航栏之BottomNavigationBar

实现的方式​ 因为Flutter的widget分为StatelessWidget和StatefulWidget.我们使用底部导航栏肯定是通过点击底部的导航按钮来实现页面的更改,所以包含BottomNavigationBar的Widget必须是一个StatefulWidget.​ 因为Scaffold这个widget中默认对BottomNavigationBar支持.所以直接用Scaffold就...

2018-12-19 17:09:51 1635 2

原创 Flutter布局之Container

Container简介​ 官方给出的简介,是一个结合了绘制(painting)、定位(positioning)以及尺寸(sizing)widget的widget。布局特点如果没有子节点、没有设置width、height以及constraints,并且父节点没有设置unbounded的限制,Container会将自身调整到足够小。如果没有子节点、对齐方式(alignment),但是提供了...

2018-12-17 19:41:34 619 1

原创 git cherry-pick操作

定义把一个commit从一个分支拿到另一个分支.相当于只merge一次commit解决的实际问题假如我在branch1分支上有一个commit,如何把它放到master分支上或者是我在branch1有两个commit,如何把其中一个commit拿到master分支上.用法在branch1上查看commit的id,例如是8d63abdcf7c331a5c29e392fa1fa85a2...

2018-12-17 15:29:35 737 2

原创 git reset --hard --soft --mixed区别

使用方法git --mixed/--hard/--soft 41e1d58739a5ab280b5b2dbde107c14aeeb0b6d2git --soft只是删除某次提交,再次提交直接commit即可git --mixed删除某次提交,并且回到add之前的状态,再次提交先add 在commitgit --hard删除末次提交,并清空所有基于41e1d58739a5ab...

2018-12-14 17:53:00 2718

原创 AIDL进行进程间通讯

AIDL进行进程间通讯AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言在上一篇 使用Messenger进行跨应用(进程)通讯中,使用Messenger进行进程间通讯的时候,服务端是能一个个的处理客户端的请求,如果有大量的并发请求的时候,Messenger就不适用了.并且Messenegr只能传递消息,并不能跨...

2018-11-02 11:29:50 276

原创 使用Messenger进行跨应用(进程)通讯

使用Messenger进行跨进程通讯Messenger可以翻译为信使,使用它我们可以进行跨进程通讯.Messengers是一种轻量的IPC,通过构造方法可以轻松的看出它的底层是现实AIDL.public Messenger(Handler target) { mTarget = target.getIMessenger();}public Messenger(IBinder ta...

2018-11-01 12:07:44 528

原创 for循环,增强for循环与Iterator的比较

先看看他们的写法普通for循环ArrayList<String> list = new ArrayList<>();for (int i = 0; i < list.size(); i++) { String x = list.get(i); System.out.println(x);}增强for循环ArrayList&...

2018-10-26 17:47:41 846

原创 Collections.synchronizedList使用方法

ArrayList众所周知ArrayList是非线程安全的,在多线程的情况下,向list插入数据的时候,可能会造成数据丢失的情况.并且一个线程在遍历List,另一个线程修改List,会报ConcurrentModificationException(并发修改异常)错误.VectorVector是一个线程安全的List,但是它的线程安全实现方式是对所有操作都加上了synchronized关键...

2018-10-26 16:40:58 23655 4

原创 OkHttp源码解析(二)之Interceptor

OkHttp中的InterceptorsgetResponseWithInterceptorChain()继续说getResponseWithInterceptorChain()方法Response getResponseWithInterceptorChain() throws IOException { // Build a full stack of interceptors. ...

2018-10-24 22:12:41 317 4

原创 OkHttp源码解析(一)

简单使用OkHttpClient client = new OkHttpClient();Request request = new Request.Builder() .url("https://api.github.com/search/repositories") .build();//执行请求的地方.client.newCall(request)...

2018-10-24 17:55:34 350

原创 Android 利用Annotation Processing 编译时通过注解自动生成代码

Android 编译时注解生成代码类似ButterKnife的框架,时间有限只实现绑定View.利用 Annotation Processing,编译的过程中读取注解,然后使用JavePoet生成我们想要的代码项目结构依赖关系左侧的的依赖是可以传递的自动生成的代码我们要自动生成这样的代码,代替我们findViewById的繁琐操作public class MainActivit...

2018-09-27 15:42:35 1399

原创 Java反射使用日记-getFields()和getDeclaredFields()的区别

getFields()getFields()获得某个类的所有的公共(public)的字段,包括父类。getDeclaredFields()getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。同样类似的还有getConstructors()和getDeclaredConstructors...

2018-09-27 11:24:30 404

原创 JAVA多线程面试题整理及答案

JAVA多线程面试题整理及答案什么是线程,进程?进程:进程就是一段程序的执行过程,进程是表示资源分配的基本单位,又是调度运行的基本单位.进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元线程:线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位,一个进程可以包含多个线程,...

2018-09-25 12:04:18 2665

原创 使用Retrofit下载文件和上传文件

使用Retrofit下载文件和上传文件上传第一种 只有文件/图片的上传/** * 上传图片 */@POST("room/fileUpload")@Multipartfun upload(@Part file: MultipartBody.Part): Observable<ResMsg>private fun upload() { ...

2018-07-29 17:15:11 595

原创 EditText 修改光标颜色和宽度

在android的输入框里,如果要修改光标的颜色及粗细步骤如下两步即可搞定:1.在资源文件drawable下新建一个光标控制color_cursor.xml<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" an...

2018-07-27 16:12:48 5124

空空如也

空空如也

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

TA关注的人

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