
Android笔记
文章平均质量分 62
JabamiLight
这个作者很懒,什么都没留下…
展开
-
Glide 使用Transformation 时保持 placeholder、error统一的一种方式
有时候我们碰到某个需求,有一个默认的error图片,大部分地方都用这个图片。但是有的地方我们用圆角,有的地方我们用圆形,如果用Glide的transform变换的话,error将不会跟随实际的图片变换,但是我们又不想不同的地方取更换图片,或者直接把ImageView弄成CircleImageView之类的,这里提供一种跟随实际图片转换的方法。比如上图的图片,我们要全局应用,适配圆角和圆形变换。调用的时候,注意必须在写的扩展方法的作用域调用。这样就保证error和实际图片都可以应用转换。原创 2022-11-09 22:33:25 · 800 阅读 · 0 评论 -
Mac mojave 10.14.6 安装brew碰到的小问题
之前想安装Flutter的环境,安装brew的时候碰到一个小问题,因为是新装的Mac系统,所以之前的没碰到过,记录一下以示尊重。/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”上面就是安装brew的命令,但是在安装过程中提示:curl: (7...原创 2019-08-12 18:26:48 · 1451 阅读 · 0 评论 -
Android从源码分析ScrollView自动滑动的焦点问题以及解决方案
大家做项目开放应该都碰到过类似于这种界面 这时候我们做Fragment切换的时候,如果Fragment带有像ListView和RecyclerView之类的列表,在切换的时候ScrollView会自动滑动到列表的顶部。虽然做手机app开发的时候,焦点处理比较少,但是我们可以从源码来分析一下焦点是如何传递的。源码分析我们两个Fragment切换的时候,最终其实还是一个View隐藏,一个...原创 2018-06-22 12:58:16 · 4682 阅读 · 0 评论 -
使用Android Studio3.1.2断点调试Android 6.0源码(无需编译)
调试源码有时候很有用,毕竟原来里的各种标志位,变量多的一匹,当时看明白了过不了多久就忘了,又重新看很是难受。要是和普通应用一样断点调试就方便很多了。基于新版Android Studio来进行源码断点调试配置,使用Windows环境。源码下载完成之后,15分钟之内就能搞定。准备工作因为要下载源码,直接放个地址https://pan.baidu.com/s/1eJFYRoQYBkUaP5hb8...原创 2018-06-20 17:13:44 · 3712 阅读 · 4 评论 -
kotlin 中::class 、class.java、javaClass、javaClass.kotlin区别
这几个有点混,小结一下吧。Kotlin的类class Person { var name: String = "" var age: Int = 0 companion object { }}java类public class Man {}要知道获取的到底是什么,可以利用andorid stuido的类型提示,一目了然。第...原创 2018-06-17 12:58:06 · 13980 阅读 · 4 评论 -
部分查看源码的要点总结
最近看了不少源码,然而看源码这种事情当时分析清楚了,下一次再看又感觉不太熟悉,毕竟Read The Fucking Source Code 嘛。所以把我感觉重要的点略微记录一下。一、在onLayout()方法中调用requestLayot()https://blog.youkuaiyun.com/litefish/article/details/53645942?utm_source=itdada...原创 2018-04-19 15:01:18 · 418 阅读 · 0 评论 -
Android proguard语法简单总结
Proguard是一个代码优化和混淆工具。 能够提供对Java类文件的压缩、优化、混淆,和预校验。压缩的步骤是检测并移除未使用的类、字段、方法和属性。优化的步骤是分析和优化方法的字节码。混淆的步骤是使用短的毫无意义的名称重命名剩余的类、字段和方法。压缩、优化、混淆使得代码更小,更高效。 所以proguard不只是用于混淆。 关于proguard的使用我就不提了,这里只总结常用语法##...原创 2018-03-22 11:59:07 · 1132 阅读 · 0 评论 -
Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask
原文地址:https://www.cnblogs.com/zhrb/p/6372799.html 1. 引子初学Java多线程,常使用Thread与Runnable创建、启动线程。如下例:Thread t1 = new Thread(new Runnable() { @Override public void run() { System.o...转载 2018-03-20 17:42:10 · 421 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用...转载 2018-03-20 16:47:45 · 180 阅读 · 0 评论 -
深入研究 Java Synchronize 和 Lock 的区别与用法
原文地址:http://blog.youkuaiyun.com/natian306/article/details/18504111 在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。 我们先从最简单的入手,逐步分析这2种的区别。&nbs...转载 2018-03-20 10:06:20 · 249 阅读 · 0 评论 -
JAVA多线程调度总结
转载地址:https://www.cnblogs.com/xlchen/p/5970880.html 从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)。并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。 但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。 或者当前正在被服务的线程需要睡一会,醒来后继续被...转载 2018-03-19 15:30:02 · 666 阅读 · 0 评论 -
Android内存优化(三) ——内存泄露常见情况
上一篇文章介绍了内存泄露的原因以及分析手段,有兴趣的同学可以先看一看Android内存优化(二) ——内存泄露检测这篇文章主要介绍内存泄露的几种情况以及常用的解决方式。一、静态变量引起的内存泄漏在java中静态变量的生命周期是在类加载时开始,类卸载时结束。换句话说,在android中其生命周期是在进程启动时开始,进程死亡时结束。所以在程序的运行期间,如果进程没有被杀死,静态变量就会...原创 2018-03-13 11:39:58 · 292 阅读 · 0 评论 -
Android内存优化(二) ——内存泄露检测
说到内存优化,不得不提的就是内存泄露了。但是到底什么是内存泄露呢?按照百度百科的说法就是:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。每个APP的内存都是有限的,不能毫无顾忌的使用,释放无用的内存就很重要了。而JAVA不像C++之类的语言,不需要手动去delete,而内存的释...原创 2018-03-12 17:28:05 · 379 阅读 · 0 评论 -
Android内存优化(一) ——JAVA内存模型学习
Android原生开发是以java为主的,那么要做内存的优化首先要了解一下java虚拟机的内存模型。如下图: 主要就是图上的几大块,本文主要简要解释一下各区域的作用以及java各种变量的存储位置。一、线程私有(一) 程序计数器PC程序计数器PC是一块较小的内存空间,可以看作所执行字节码的行号指示器。字节码解释器就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,比...原创 2018-03-08 15:12:13 · 1446 阅读 · 0 评论 -
Android布局优化
安卓性能优化的内容很多,但是做起来其实就和挤牙膏一样。说道布局优化,首先我们要理解图形是如何被渲染到屏幕上的。这里借鉴大佬的图: 其实cpu也可以用来做图形显示,但是为什么又需要专门的gpu呢?简单来说cpu作为中央处理器任务很多,对于复杂图形的计算速度跟不上需求,要单独依赖cpu会大大加大成本,所以gpu单独做图形处理。 所以cpu将内存中的矢量图形丢个gpu,由gpu栅格化来显示。...原创 2018-03-07 16:56:54 · 359 阅读 · 0 评论 -
简单处理app启动白屏以及优化启动速度
一、优化启动白屏其实对于优化启动白屏有三种: 主题里设置 1、 <item name="android:windowIsTranslucent">true</item>2、 <item name="android:windowBackground">xxxx</item>3、 <item name=&qu原创 2018-03-06 16:54:28 · 679 阅读 · 0 评论 -
数据结构之红黑树
转载地址:http://blog.youkuaiyun.com/eson_15/article/details/51144079 (友情提示,红-黑树是基于二叉搜索树的,如果对二叉搜索树不了解,可以先看看:二叉搜索树 ) 从第4节的分析中可以看出,二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项。但是二叉搜索树有转载 2018-01-17 16:33:18 · 284 阅读 · 0 评论 -
AVL树详解
AVL树是最先发明的自平衡二叉查树,二叉查找树的性质如果不知道可以百度一下。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。其实性质还是比较简单的,看一张网上图大概就明白了: 话不多说,直接上重点。一、AVL树的旋转AVL树在插入和删除接点的时候会破坏树的平衡,这时候就需要一些操作来恢复平衡。我们暂时不考虑是如何恢复平衡的,首先学习下单个接点的旋转,旋原创 2018-01-16 10:47:35 · 322 阅读 · 0 评论 -
android studio使用c++与c混合编译是遇到不太好发现的坑
1.项目集成ffmpeg,copy了几个文件到项目里方便执行ffmpeg的命令。直接和java交互的文件是cpp文件,然后编译的时候死活通不过,一直提示”)”不匹配。尼玛的搞了一下午没看出什么问题,后来才发现cmdutils.c中有个方法的参数名为class,之后把这个名字换了一个就编译成功了,真的是有毒。 2.网上找的一个日志文件。//// Created by TY on 2018原创 2018-01-09 17:21:19 · 1278 阅读 · 0 评论 -
二叉树的递归遍历和循环遍历
转载自:http://blog.youkuaiyun.com/pi9nc/article/details/13008511二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归转载 2018-01-05 13:40:33 · 17771 阅读 · 0 评论 -
使用C语言将pcm数据封装成wav文件
pcm是原始音频数据,wav是windows中常见的音频格式,只是在pcm数据中添加了一个文件头,wav文件格式可以参考http://soundfile.sapp.org/doc/WaveFormat/// WAVWriter.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;typedef原创 2017-10-10 19:20:15 · 1735 阅读 · 1 评论 -
Android studio下使用ndk-stack定位crash
Android studio下使用ndk-stack定位crash原创 2017-10-09 14:42:57 · 6796 阅读 · 0 评论 -
Makefile部分学习理解
1.通配符等变量定义中通配符 *.c类似只是表示字符串,在依赖规则以及shell命令的时候可以这样使用。需要变量定义使用wildcard函数。2.wildcard patsubst可以使用$(patsubst %.c,%.o,$(wildcard *.c),首先使用“wildcard” 函数获取工作目录下的.c 文件列表;之后将列表中所有文件名的后缀.c 替换为.o。这样 我们就原创 2017-09-16 10:44:03 · 296 阅读 · 0 评论 -
JNI动态注册
概述jni简单的说就是java调用c,注册c的方法有两种,一种是静态注册,一种是动态注册。静态注册就是通过javah生成.h文件来实现,不是本文重点。动态注册通过JNI_OnLoad来注册native方法,下面直接上代码。原创 2017-08-17 11:05:04 · 435 阅读 · 0 评论 -
C++对于函数名重载的要点以及extren "C"
C++ extern"C" 倾轧原创 2017-08-09 15:17:55 · 1059 阅读 · 0 评论 -
Java和Kotlin互相调用需要注意的问题
kotlin与java互相调用问题总结原创 2017-07-28 15:03:24 · 5101 阅读 · 0 评论 -
android 沉浸式设计方案总结
沉浸式设计已经应用到几乎所有的app,但是各种百度出来的资料都是不全面的,无奈之下只好自己从头总结一番,包括的内容有: - 4.4以及5.0以上各种情况解决方案 - 设置状态栏黑色字体修改状态栏、导航栏颜色4.4实现方案values-v19/style.xml:&lt;style name="TranslucentTheme" parent="Theme.App...原创 2017-07-17 11:03:24 · 720 阅读 · 0 评论 -
Kotlin的常用顶层函数总结
kotlin和Java不一样,可以定义一些顶层函数,一些顶层函数用来可以简化一些操作,让你的代码变得更加简洁易懂,说白了也就是能装逼,这里总结一下平时用的多的。主要是4个,with,run,apply,let,also,use。with首先看with的定义@kotlin.internal.InlineOnlypublic inline fun <T, R> with(receiver: T, bl原创 2017-07-12 18:04:05 · 5122 阅读 · 0 评论 -
使用Gradle生成BuildeConfig以及文字资源
BuildConfig从sdk tools 17开始,构建工具会自动生成BuildeConfig类,默认的长这个样子public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_I原创 2017-07-11 17:10:18 · 651 阅读 · 0 评论 -
使用Kotlin编写6.0权限检查框架学习总结
使用Kotlin编写6.0权限检查框架学习总结很久之前就学习过编译时注解的原理,不过对于java的Element使用不多,这次又重新复习了一遍,顺便学习了一下使用kotlin来编写。 对于运行时注入和编译时注入,不知道的同学百度一下吧,其实不难理解,这里是主要是使用AbstractProcessor类在编译是自动生成类来避免一些使用反射的场景。要使用这个类首先需要一些预备知识。Java 的Elem原创 2017-07-05 09:42:52 · 1734 阅读 · 3 评论 -
安卓触摸事件分发经验总结
安卓触摸事件分发总结安卓时间分发对于自定义控件来说十分重要,很多事件如果不理解事件分发流程就会显得十分困惑,这里只说总结,源码里都能找到答案,暂时没时间看源码的可以省下时间。1.父view事件拦截关注onInterceptTouchEvent(),requestDisallowInterceptTouchEvent()两个方法。 2.子VIew能接收事件的前提是调用子View的dispatchTo原创 2017-06-10 16:17:07 · 292 阅读 · 0 评论 -
安卓PathMeasure的简单用法
安卓PathMeasure的简单用法Path可以按照路径画出很多效果,而使用pathMeasure可以对path进行测量,或者找到某个点具体位置等。使用pathMeasure实现如下效果 思路: 1.首先使用path画出桃心路径 2.接着使用pathMeasure获取该点的Matrix 3.将图片画到对应的matrix上,再使用属性动画不断更新视图原创 2017-05-27 15:41:48 · 584 阅读 · 0 评论 -
安卓Canvas的save以及saveLayer简单总结
安卓Canvas的save以及saveLayer简单总结首先相同的地方,两者都会保存当前画布的状态,并压入栈中。不同点save不会产生新的图层,saveLayer会产生新的图层,并且之后的画图都会在新的图层中,画完后在叠加在之前的图层上。saveLayer依据当前canvas的状态来产生新的图层,saveLayer会增加使用内存,需要合理分配。restore和restoreToCount可以通...原创 2017-05-18 10:24:26 · 1849 阅读 · 0 评论 -
从setContentView开始的源码阅读
从setContentView开始的源码阅读(一)学习了一段时间的安卓自定义view,稍微总结一下学到的东西。最近也事情也比较烦,还是静下心来学习一波,不忘初心。 对于安卓开发者来说,setContentView这个方法再熟悉不过了,每个Activity都会调用,大家都知道这个是设置当前activity界面的,里面具体做了什么呢?通过原来阅读来简单介绍一下。一. DecorView的生成原创 2017-05-07 13:40:52 · 456 阅读 · 0 评论 -
RX学习笔记之map变换
RX学习笔记之map变换首先在一个最简单的map变换oneMapSubscription = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) {原创 2016-11-25 23:19:22 · 674 阅读 · 0 评论