phantomVK

Cease to struggle and you cease to live.

Android源码系列(7) -- RxLifecycle

一、前言 1.1 简介 RxJava带来编码流畅性,map、flatmap、filter等通过链式操作,既避免回调地狱又解决线程频繁切换的问题。应用最多的场景如网络访问后回调主线程显示结果,如果界面已经退出但订阅没有解除,那Activity或Fragment句柄会被Observer长期持有导致内存泄漏。 1.2 传统方案 传统解决办法是构造RxJava时管理Disposable,on...

ToolBar修改标题截断位置

通过反射ToolBar中TextView的setEllipsize方法,设置标题中间为截断位置 1 2 3 4 5 6 7 8 9 10 private void setEllipsize(Toolbar toolBar) { try { Field field = Toolbar.class.getDeclaredField("mTitleTextView"); ...

Linux挂载exFat分区

先安装exfat-fuse和exfat-utils: 1 sudo apt-get install exfat-fuse exfat-utils 安装完之后直接插入exFat的设备,exFat分区就会像NTFS或其他支持的类型一样自动加载。用完后卸载或弹出就可以。

Android点击空白区域隐藏键盘

重写dispatchTouchEvent拦截点击事件,点击区域不是EditText隐藏键盘 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 class MainActivity : AppCompatActivity() { ove...

魅族手机调试不打印Log日志

平常都是用魅族MX5真机调试,有问题直接打断点看数据,不依赖控制台输出的Log。后来发现控制台应用Log只能打出 Error 级别,其他级别没有任何输出。开始以为是应用Log的问题,换三星手机所有Log都能打印。最后找魅族 开发者选项 ,找到相关解决方案。 在关于手机里面多次点击下方的版本号开启开发者选项: 开发者选项在辅助功能中: 然后拉到开发者选项最下面点击性能优化: ...

外观设计模式探索

前言 移动端开发中,经常遇到通用逻辑加载:例如IM中个人头像加载。在应用开发初期,由于缺乏把所有加载逻辑整合到一起的思维,导致后期头像逻辑变化时,只能用搜索找出相关的代码并修改。即使代码分散的地方比较少,也经常出现遗漏修改。 头像加载这种统一的加载逻辑,必须整合到一个类中,并做好抽象,以便应对将来的需求变更。 思维拓展开来,用户名获取、应用配置读取、读取Session等多层次数据获取(...

RaspberryPi 安装 Go1.8

树莓派使用Linux内核,想必能用来运行Go的程序。但树莓派孱弱的性能去编译Go源码不现实,所以使用官方已经编译好的二进制来安装。 在https://golang.org/dl/找到 armv6l指令集的安装包并下载 1 2 pi@raspberrypi:~ $ cd /usr/local pi@raspberrypi:/usr $ wget https://storage.google...

Retrofit2请求添加Header和Query参数

在Retrofit2里一般通过@Query注解来给单个请求增加query参数,也可能需要给每个请求都加上query参数的场景。 如:Kong通过Authorization的JWT值验证请求合法性。 如果有很多接口,每个接口手动添加@Query注解是不合理的。最好的方式是拦截所有网络请求,添加query参数后再发送。 请看下列代码: 1 2 3 4 5 6 7 8 9 10 11 12...

Error: AndroidManifest.xml is also present at

导入多个第三方依赖库的时候报错: 1 2 3 4 Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.andro...

树莓派设置USB无线网卡

一、注意和准备 1.1 注意事项 使用无线网卡前请检查电源能否提供足够电压和电流; 使用最新系统:系统增加新网卡支持,免去编译驱动; 仅针对RaspberryPi 3B以下设备,这些设备没有配备无线网卡; 请用有线ssh登入,设置过程中树莓派需要重启无线网络; 1.2 硬件信息 先看我使用的无线网卡:...

Gson转换Json中Uri字符串

如果Json中有Uri字符串,需要自定义Gson的解释器: 先创建类UriDeserializer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class UriInOut implements JsonSerializer<Uri>, JsonDeserializer<Uri> { @Override pub...

RxJava2与Retrofit2冲突

如果同时引入以下库 1 2 3 4 implementation 'io.reactivex.rxjava2:rxjava:2.1.3' implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementat...

使用Gson转换Json为ArrayList

用Gson.fromJson()转换字符串list为对应的ArrayList实例 1 return mGson.fromJson(list, new TypeToken<ArrayList<HomeServerConfig>>(){}.getType()); 参考: https://stackoverflow.com/questions/12384064...

HeightListView - 自适应TextView高度

使用Adapter可能需要在一个item里包含ListView控件动态展示多个TextView。普通的ListView会出现所有的TextView只显示第一行而不是多行内容的问题。 问题的根源是ListView没有正确计算出每个TextView文字需要的高度,仅显示一行文字的高度。 重写的的类中,把计算高度的onItemsChanged()通过DataSetObserver绑定到数据对应...

View测量代码笔记

在网上看见两种对View测量大小的方法。初步测量的数值没有问题,所以先做个笔记记录,以后深入研究。 1 2 3 4 5 6 7 8 9 10 11 12 // 方法一 view.measure(0, 0); view.getMeasuredHeight(); // 方法二 view.getViewTreeObserver().addOnGlobalLayoutListener(new V...