自定义博客皮肤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 839

原创 线程池ThreadPoolExecutor简介

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

2019-12-05 10:38:32 280

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

Mac配置oh my zsh,并使用ITerm2 先看看最终效果 第一步安装on my zsh sh -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 528

原创 详解Handler机制

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

2019-11-14 20:27:55 326

原创 Flutter底部导航栏之BottomNavigationBar

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

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

原创 Flutter布局之Container

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

2018-12-17 19:41:34 797

原创 git cherry-pick操作

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

2018-12-17 15:29:35 904 1

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

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

2018-12-14 17:53:00 2889

原创 AIDL进行进程间通讯

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

2018-11-02 11:29:50 402

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

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

2018-11-01 12:07:44 665

原创 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 968

原创 Collections.synchronizedList使用方法

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

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

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

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

2018-10-24 22:12:41 440 2

原创 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 440

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

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

2018-09-27 15:42:35 1576

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

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

2018-09-27 11:24:30 495

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

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

2018-09-25 12:04:18 2799

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

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

2018-07-29 17:15:11 867

原创 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 5331

空空如也

空空如也

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

TA关注的人

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