![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
w366549434
一个基本自由的android开发者
展开
-
Retrofit、OKHttp使用技巧记录
如何获取retrofit访问的实际url链接原创 2022-09-10 23:25:51 · 321 阅读 · 1 评论 -
WorkManager使用小技巧
WorkManager + Retrofit,处理网络请求的妙用原创 2022-09-10 17:46:17 · 742 阅读 · 0 评论 -
adb + bat 脚本实现自动化测试
许多时候调试Android应用会用到adb命令,这些adb命令大多是重复的,而且一条条输入的话,又会特别费时间,那么能不能把这些adb命令与bat脚本结合起来使用,增加工作效率呢? 于是我开始了骚操作实验。。。1、一般的adb命令可以直接放到bat脚本中执行adb rootadb remountadb install xxx.apk这类命令可以直接写到bat中随后双击执行即可。ps:bat文件的创建很简单,先新建一个.txt文本,然后修改其后缀名为.b...原创 2021-08-31 09:27:56 · 4916 阅读 · 1 评论 -
Android项目中的Gradle使用笔记
今天又发现了一个gradle的小技巧/* * 下面这段代码分为三个部分 * 'ipconfig' 是一个可执行的命令 * execute() 是一个用于执行命令的抽象方法 * text 是上述命令执行之后的结果 */'ipconfig'.execute().text这段代码可以在gradle中使用起来,用于项目的自动化构建除了上述命令,它还可以执行adb、git等命令,并且在获取其执行结果后,还能够再对结果进行格式化处理,比如://截取字符串'adb devi原创 2021-07-29 17:09:28 · 195 阅读 · 0 评论 -
EditText的InputFilter使用笔记
/** * InputFilters can be attached to {@link Editable}s to constrain the * changes that can be made to them. */public interface InputFilter{ /** * This method is called when the buffer is going to replace the * range <code>dstart .原创 2021-06-03 10:38:10 · 266 阅读 · 0 评论 -
记录一下AppCompat上踩的坑
首先是如果继承android.support.v7.widget包下的控件,可能就会发生new出来之后,无法正常显示的情况。原因就是v7包下的控件都需要依赖theme,如果没有activity没有设置好theme或者系统版本比较低,都会造成无法显示的情况比如:AppCompatCheckBoxAppCompatEditTextAppCompatButton这些控件都有这种情况解决的方法就是: public MyEditText(Context context) .原创 2021-05-21 17:56:32 · 167 阅读 · 0 评论 -
Android全面屏适配笔记
由于现在的刘海屏、穿孔屏越来越多,所以现在针对这些屏幕的适配工作也越来越麻烦。有必要自己记录一份适配笔记了,防止以后要用的时候在网上找不到。(这是在没有做任何适配的情况下,直接运行老代码的效果。可以看到顶部蓝色的状态栏与我们的app的界面十分不搭。)针对这种情况,我想到了几种不同的适配方案:1、搞一个类似微信那样的适配,将状态的颜色与ActionBar的颜色调整为一样的颜色。//在Activity类中添加这段代码,用于改变状态栏的背景色getWindow().setStatusBar原创 2021-02-03 18:10:14 · 571 阅读 · 0 评论 -
Android系统是怎么知道我们点击哪个按钮的?
我最近又开始想着鼓捣游戏开发了。大家知道在游戏开发中经常要处理“碰撞检测”,这是一个非常吃性能的计算过程,我就一直在想有什么办法能够优化“碰撞检测”执行效率。然后我突然想到在操作手机时,我的手指相对于Android系统不就是一个经典的“碰撞检测”吗?首先我们来看这样一个场景:屏幕上有N个按钮,我们随意点击其中一个,手机怎么知道我点的是哪一个?可能有小伙伴会问:这不是很简单吗?因为你点了屏幕啊,屏幕知道你点的是哪个按钮就行了啊。但是事情不是这样。在冯诺依曼的计算机模型中,我们常说的屏.原创 2021-01-31 16:42:49 · 870 阅读 · 0 评论 -
学习Android Jetpack的笔记记录1
Google推出jetpack已经挺长时间了,但是我由于工作原因,没有什么时间去学习这个框架,日常工作也用不到这类技术。但是生命不息,学习不止呀。首先介绍一下jetpack,按照Google官方的说法Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。它可以帮助开发者快速的构建高质量的应用。它被分为四个主要模块:1、Architet...原创 2020-12-27 14:16:03 · 118 阅读 · 0 评论 -
Android中内存泄漏的检查工具记录
最近对老项目进行review的时候发现了很多问题,其中比较突出的就是内存泄漏。由于这种问题比较特殊,因为它平时不会影响我们App的正常功能,但是如果一直不去管理,那么在App运行一段时间之后,必然出现卡顿,甚至是崩溃(由于内存占用而导致的)。 为了解决这个问题我找到了一个第三方检查内存泄漏的工具LeakCanary。使用方式也很简单,网上有很多教程,我在这里贴一下它的Github地址使用方式,step1://如果只需要在测试环境中使用就用这个debugImplementat...原创 2020-11-07 20:20:23 · 171 阅读 · 0 评论 -
Android与Windows的交互
占坑原创 2020-10-20 11:48:30 · 1590 阅读 · 0 评论 -
日常踩坑----java中类的加载
先上代码public class Test extend TestParent { Runnable mRun = new Runnable(){ public void run(){ System.out.println("运行Runnable接口"); } } public Test(){ super(); //do somethings... }原创 2020-08-14 14:40:04 · 129 阅读 · 0 评论 -
学习一下Activity的四种启动模式
activity的四种启动模式分别是:1、Standard 标准2、SingleTop 顶部复用3、SingleTask 栈内复用4、SingleInstance 单例模式首先要了解一个概念:任务栈 它是专门用来存放Activity的栈,每一次使用startActivity方法创建的Activity实例,都会被存放在这里统一管理。这个Task栈遵循“先进后出”原则,每一次我们按下back键,都会先销毁栈顶的Activity。然后再来谈谈标准启动模式 St...原创 2020-07-14 15:33:55 · 315 阅读 · 1 评论 -
java中volatile关键字的作用和原理
在之前的一篇博客中挖过坑,今天来填一下。之前挖坑的博客在那篇博客中,我提到了volatile关键字,它是用于解决多线程环境下数据不一致问题的(也就是线程不安全问题)。首先我们来看一段代码...原创 2020-07-01 18:26:44 · 531 阅读 · 0 评论 -
Android之AlertController的源码学习记录
这里节选了AlertController的源码,它是AlertDialog.Builder中非常重要的工具类,主要作用是根据Builder中配置好的参数来生成对应的Dialog。我节选下面这段代码的原因就是因为我们通过AlertDialog.Builder创建的dialog,只要点击Positive、Negative、Neutral等按钮就会触发dismiss方法,然后自行关闭。。。虽然大家都知道点击按钮之后会触发dismiss,但是估计很少有人知道dismiss方法是通过什么方式触发的吧。。。所以我.原创 2020-05-27 11:09:01 · 530 阅读 · 0 评论 -
Android中的线程工具类学习:AsyncTask、HandlerThread、IntentService
首先是AsyncTask这是一个用于异步处理数据的线程操作类。由于Android中存在UI线程的概念,只有在UI线程中才能对View(肉眼可见的地方)进行修改和调整。UI线程中是不能做一些耗时地操作的,比如说访问网络(http请求)、从SD卡读写数据(I/O操作)亦或者是比较复杂的数据运算,这些都是不能放在UI线程中进行的(会导致ANR异常)。为了解决这个问题,Android系统提供了这个异步操作类。(以下是部分代码)public abstract class AsyncTask<Par原创 2020-05-25 21:04:00 · 2187 阅读 · 1 评论 -
android笔记---context.getResources().getAssets()
本篇博客就是记录一下,当我们在Android Studio中导入其它jar包或aar包时,它们本身可能也包含一个assets文件夹,如果我们要获取这些jar包、aar包中的assets文件,也是可以通过context.getResources().getAssets()来获取的。同样,就是因为这个原因,不同的jar、aar以及你自己的android项目中的assets文件是不可以重名的。比如你自己的项目中有个名为A.bmp文件,这时如果你导入一个第三方包,碰巧这个包里的assets中也有一个A.b.原创 2020-05-21 16:13:08 · 3777 阅读 · 0 评论 -
android开发笔记--MediaPlayer error (1, -2147483648)
今天记录一个坑,使用MediaPlayer播放视频时出现了黑屏的情况,然后看控制台输出的系统日志中包含了一个“MediaPlayer error (1, -2147483648)”然后我就去查了一下源码,发现了这个public interface OnErrorListener { /** * Called to indicate an error. * * @param mp the MediaPlayer原创 2020-05-20 14:13:01 · 2501 阅读 · 2 评论 -
Android上使用OkHttp来实现断点下载(续传)
感觉断点下载这个功能还是挺常用的,毕竟是可以节省不少流量和时间,所以今天单独做一篇断点续传的实现。直接上代码吧这里是如何获取资源文件大小的代码//如何使用OkHttp获取下载资源的大小public static long getContentLength(OkHttpClient mClient, String downloadUrl) { Request request = new Request.Builder() .url(downloadUrl) .build原创 2020-05-09 11:10:14 · 1291 阅读 · 0 评论 -
今天学到一个新姿势(划掉)知识
当我们要对某一个对象进行一系列操作的时候,通常要怎么做呢?比如对一个“电脑”对象进行打字操作,一般的流程是这样的:computer.power();//通电开机computer.setInputMethod();//设置输入法computer.pressKey();//敲击键盘打字这类操作写下来。。。代码就变得不优雅了呀!!!而且随着你的操作越来越多,这些代码会越来越长。并且如...原创 2020-04-27 17:38:34 · 173 阅读 · 0 评论 -
今天记一个技术无关的博客
今天我发现我的股票账户和基金账户的市值差不多了。。。所以打算以今天作为一个原点,来记录基金与我自己操盘的股票看看谁的涨幅会在未来更高...原创 2020-04-14 14:47:25 · 106 阅读 · 0 评论 -
记录一下 MediaPlayer info/warning (3,0)的意思
最近做项目的时候在android studio的控制台总是能看到MediaPlayer info/warning (3,0) 的日志输出。然后我就进入MediaPlayer源码中看了看。 /** The player just pushed the very first video frame for rendering. * @see android.media.Medi...原创 2020-04-09 10:09:44 · 4412 阅读 · 0 评论 -
如何在Android项目中配置BuildConfig常量
在AndroidStudio中构建项目的时候,可以通过build.gradle来配置一些常量,用于全局使用,比如说APP的版本号、作者名、公司名等等。那么怎么实现这些配置呢?首先我们打开android项目app目录下的build.gradle文件apply plugin: 'com.android.application'android { compileSdkVersion...原创 2020-04-06 18:55:40 · 3496 阅读 · 0 评论 -
View.isInEditMode()方法的作用
/** * Android源码 * Indicates whether this View is currently in edit mode. A View is usually * in edit mode when displayed within a developer tool. For instance, if * this View ...原创 2020-03-27 14:23:48 · 4927 阅读 · 1 评论 -
Dialog的弹出位置控制
Dialog一般出现都是屏幕中心,但有的时候我们希望它能在屏幕左侧,或者右侧亦或者是屏幕顶部。这时候我们就需要用的Dialog.getWindow().getAttributes()方法啦dialog = new Dialog(getActivityContext());dialog.setContentView(localView); //下面的几个属性可能也会经常用...原创 2020-03-25 19:08:51 · 10134 阅读 · 0 评论 -
Android View.getLocationOnScreen的作用
Android View.getLocationOnScreen记录一下getLocationOnScreen方法的作用/** * <p>Computes the coordinates of this view on the screen. The argument * must be an array of two integers. After ...原创 2020-03-25 15:22:48 · 3024 阅读 · 0 评论 -
Android环境下OpenGL ES的学习
写在前面:我也是OpenGL的初学者,本篇是作为一个学习笔记来写的。首先学习一下关于OpenGL中的重要概念:矩阵你做了一个物体想放在空间某一个坐标上,需要一个World矩阵吧?然后你需要一个摄像机来拍摄这个物体,让这个物体可见,对吧?那不就需要:1、View矩阵,决定摄像机在哪里,朝哪里看。2、Projection矩阵,摄像机的视角、焦距、近平面、远平面。3、最后把物体的每个...原创 2020-03-20 09:42:32 · 224 阅读 · 0 评论 -
算法学习---贪心算法
想通过这篇博客来分享一下学习贪心算法和动态规划的过程首先什么是贪心算法?百度百科给出的释义是:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。翻译成人话就是用简单粗暴的方式,以最少的代价(占用的时间和空间),得出结果。比如某面包店有A、B、C三种大小的面包,其中A面包可以提供10点...原创 2020-03-19 15:03:58 · 232 阅读 · 0 评论 -
Java基本功之i++、i--、++i、--i
今天敲代码的时候被基础给击倒了(难受 while (i < j) { res = height[j] > height[i] ? Math.max(res, height[i++] * (j - i)): Math.max(res, height[j++] * (j ...原创 2020-03-19 10:35:48 · 875 阅读 · 0 评论 -
Android Handler知识学习记录(一)Handler的postDelayed和postAtTime
//Handler中的源码 public final boolean postDelayed(Runnable r, long delayMillis) { return sendMessageDelayed(getPostMessage(r), delayMillis); } public final boolean sendMessa...原创 2020-03-18 15:04:59 · 2598 阅读 · 0 评论 -
Android中的System.currentTimeMillis和SystemClock类
最近在看Handler源码的时候发现了Android系统中对于获取时间的不同方法。首先是我们比较常用的System.currentTimeMillis,它计算的是从1970年1月1日开始的时间,以毫秒为单位。使用这个方法的存在一定的风险,因为它是以系统时间为基准的,而我们可以通过SystemClock.setCurrentTimeMilis来设置系统时间。比如说我们设置了一个定时任务在...原创 2020-03-06 10:52:41 · 3248 阅读 · 1 评论 -
java中类的加载和线程使用所导致的变量值异常情况
占坑原创 2020-03-01 21:12:20 · 327 阅读 · 0 评论 -
java中弱引用知识学习WeakHashMap、WeakReference
先占个坑,今天因为项目需求所以想到了java中的弱引用特性。首先什么是弱引用?Object a = new Object();Object b = a;比如上面的代码,b就是a的强引用。当我们对a变量进行修改时,b对应的也会发生变化。并且当GC想要回收a变量所占用的内存时,会因为b持有了a的强引用,导致对a的内存回收失败,进而导致内存泄漏。所谓弱引用,就是用来解决这个问题的。...原创 2020-02-25 14:16:07 · 330 阅读 · 0 评论 -
java中Matcher类的find()和matches()的区别
String str = "m222"; Pattern p = Pattern.compile("[0-9]+");//0至9,出现一次或多次 Matcher m = p.matcher(str); println("m.matches->>"+m.matches());//打印输出 if(m.find...原创 2020-02-17 21:43:10 · 3582 阅读 · 2 评论 -
java算法面试题解题记录
1、文本格式校验根据给出的pattern判断字符串str是否符合特定格式。例如:pattern = "abba"; str = "dog cat cat dog"; 返回true pattern = "abbc"; str = "dog cat cat fish"; 返回true pattern = "abbc"; str = "d...原创 2020-02-13 17:15:19 · 203 阅读 · 0 评论 -
GitHub源码学习笔记之TableView(一)
写在前面:最近发现一个很酷的开源项目,正好自己也打算写一个TableView,但是。。。写代码哪有抄代码爽!所以我决定来学习一下大佬的代码(先贴出来Github地址---->TableView)学习第一步,先看基本架构图:按照图上的解释,TableView的实现方式是多个RecyclerView组合的结果,多个RecyclerView在TableView的统一架构下实现数据联...原创 2020-01-18 15:25:03 · 383 阅读 · 0 评论 -
TableView开发笔记(一)
GitHub源码学习笔记之TableView最近想做一个TableView,主要用于展示表格数据,并且要支持滑动和自定义表格内部的元素(子view)样式所以先占个坑,做一些准备工作。第一步:确定一下需求左上角的“lock”白色块,我把它称为“lockView”;上方的“abc”列我把它称为“horizontalView”;左侧的“1234567”列我把它称为“verticalV...原创 2020-01-17 14:18:45 · 333 阅读 · 0 评论 -
Android Application的生命周期
//一个普通的Applicationpublic class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //当Application启动时,第一个调用 } @Override publ...原创 2020-01-14 21:33:52 · 1080 阅读 · 0 评论 -
Android Support到AndroidX的踩坑笔记
刚刚将新打包好的aar包,放入几年前的老项目中,结果在调用aar中的某个方法时,程序直接闪退了并且提示 java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/content/ContextCompat经过一番查找,发现原来是因为android.support.*依赖包和androidx.core.*不能共存,...原创 2020-01-14 09:18:32 · 5615 阅读 · 2 评论