- 博客(68)
- 资源 (1)
- 收藏
- 关注
原创 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
5267
1
原创 Android项目中的Gradle使用笔记
今天又发现了一个gradle的小技巧/* * 下面这段代码分为三个部分 * 'ipconfig' 是一个可执行的命令 * execute() 是一个用于执行命令的抽象方法 * text 是上述命令执行之后的结果 */'ipconfig'.execute().text这段代码可以在gradle中使用起来,用于项目的自动化构建除了上述命令,它还可以执行adb、git等命令,并且在获取其执行结果后,还能够再对结果进行格式化处理,比如://截取字符串'adb devi
2021-07-29 17:09:28
243
原创 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
311
原创 记录一下AppCompat上踩的坑
首先是如果继承android.support.v7.widget包下的控件,可能就会发生new出来之后,无法正常显示的情况。原因就是v7包下的控件都需要依赖theme,如果没有activity没有设置好theme或者系统版本比较低,都会造成无法显示的情况比如:AppCompatCheckBoxAppCompatEditTextAppCompatButton这些控件都有这种情况解决的方法就是: public MyEditText(Context context) .
2021-05-21 17:56:32
231
原创 Android全面屏适配笔记
由于现在的刘海屏、穿孔屏越来越多,所以现在针对这些屏幕的适配工作也越来越麻烦。有必要自己记录一份适配笔记了,防止以后要用的时候在网上找不到。(这是在没有做任何适配的情况下,直接运行老代码的效果。可以看到顶部蓝色的状态栏与我们的app的界面十分不搭。)针对这种情况,我想到了几种不同的适配方案:1、搞一个类似微信那样的适配,将状态的颜色与ActionBar的颜色调整为一样的颜色。//在Activity类中添加这段代码,用于改变状态栏的背景色getWindow().setStatusBar
2021-02-03 18:10:14
607
原创 Android系统是怎么知道我们点击哪个按钮的?
我最近又开始想着鼓捣游戏开发了。大家知道在游戏开发中经常要处理“碰撞检测”,这是一个非常吃性能的计算过程,我就一直在想有什么办法能够优化“碰撞检测”执行效率。然后我突然想到在操作手机时,我的手指相对于Android系统不就是一个经典的“碰撞检测”吗?首先我们来看这样一个场景:屏幕上有N个按钮,我们随意点击其中一个,手机怎么知道我点的是哪一个?可能有小伙伴会问:这不是很简单吗?因为你点了屏幕啊,屏幕知道你点的是哪个按钮就行了啊。但是事情不是这样。在冯诺依曼的计算机模型中,我们常说的屏.
2021-01-31 16:42:49
943
原创 学习Android Jetpack的笔记记录1
Google推出jetpack已经挺长时间了,但是我由于工作原因,没有什么时间去学习这个框架,日常工作也用不到这类技术。但是生命不息,学习不止呀。首先介绍一下jetpack,按照Google官方的说法Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。它可以帮助开发者快速的构建高质量的应用。它被分为四个主要模块:1、Architet...
2020-12-27 14:16:03
153
原创 自定义AppCompatRadioButton控件,用于颜色选择
写在前面今天晚上做项目的时候临时加了个色彩自定义的功能。。。(又是临时加,有没有考虑过我的头发啊)那么颜色自定义,必然就需要一个色彩选择的控件啦,我在网上找到的一些现成的控件,体积都有点大,不适合我的项目(为了一点这样的功能,加这么多代码,不是我的风格)开始动手然后我就开始对RadioButton下手了,自定义一个RadioButton,利用DrawableLeft、DrawableRight的特性,将颜色标记出来,如下图刚开始做的时候想的很天真,把实例的几个颜色用shape标.
2020-11-26 21:04:19
1784
原创 Android中内存泄漏的检查工具记录
最近对老项目进行review的时候发现了很多问题,其中比较突出的就是内存泄漏。由于这种问题比较特殊,因为它平时不会影响我们App的正常功能,但是如果一直不去管理,那么在App运行一段时间之后,必然出现卡顿,甚至是崩溃(由于内存占用而导致的)。 为了解决这个问题我找到了一个第三方检查内存泄漏的工具LeakCanary。使用方式也很简单,网上有很多教程,我在这里贴一下它的Github地址使用方式,step1://如果只需要在测试环境中使用就用这个debugImplementat...
2020-11-07 20:20:23
198
原创 日常踩坑----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
159
原创 来一篇跑马灯TextView----拖更太久了
TextView增加跑马灯效果,相信很多朋友都用过了,但是如果使用android自带的跑马灯效果,还是有很多时候无法满足项目需求的。比如系统自带的跑马灯效果需要获得焦点才能启动,如果当前页面中存在多个TextView都需要跑马灯效果,那就懵逼了,根本没法一起跑。所以我决定自己基于TextView写一个。。。废话不多说上代码/** * 设计思路就是通过UI线程轮询更新绘制Text的坐标,从而实现滚动 */public class MarqueeTextViewN extends Tex
2020-08-13 17:56:03
197
原创 学习一下Activity的四种启动模式
activity的四种启动模式分别是:1、Standard 标准2、SingleTop 顶部复用3、SingleTask 栈内复用4、SingleInstance 单例模式首先要了解一个概念:任务栈 它是专门用来存放Activity的栈,每一次使用startActivity方法创建的Activity实例,都会被存放在这里统一管理。这个Task栈遵循“先进后出”原则,每一次我们按下back键,都会先销毁栈顶的Activity。然后再来谈谈标准启动模式 St...
2020-07-14 15:33:55
364
1
原创 java中volatile关键字的作用和原理
在之前的一篇博客中挖过坑,今天来填一下。之前挖坑的博客在那篇博客中,我提到了volatile关键字,它是用于解决多线程环境下数据不一致问题的(也就是线程不安全问题)。首先我们来看一段代码...
2020-07-01 18:26:44
561
原创 Android中的Gradle知识学习记录(一)
目前Android Studio创建项目的时候都是依赖于Gradle的,每个项目都有两个build.gradle,一个是app.gradle另一个是项目gradle。项目gradle就是用来配置整个项目的基础资源引用,包括gradle版本的依赖,google、jcenter、阿里云镜像之类的库依赖,类似是这样:// Top-level build file where you can add configuration options common to all sub-projects/modu
2020-06-25 21:41:08
295
原创 在Android开发中不要再用new Thread的方式开启线程啦
正如标题所言,如果直接使用new Thread的方法创建一个线程,很大概率就会导致内存泄漏。因为一个内部类始终会持有外部类的引用,如果这个内部类恰好是一个Thread对象,它拿着外部类的引用跑在另一个线程中,这就很容易导致外部类在应该释放的节点无法被释放,从而导致内存泄漏。为了杜绝这类情况,还是建议大家不要再代码中直接使用new Thread这种粗暴的方式创建线程,而是使用HandlerThread来管理子线程,亦或者是自己写一个线程池控制类来管理好各个子线程。可以参见我之前的博客->Andr
2020-06-22 11:55:45
5863
原创 Java中的IO框架设计思想
写在前面首先本篇是参照知乎某匿名用户的回答而写的,在征求TA的同意之后,我将他的回答与我的个人理解综合起来写成本篇博客,如果存在不清楚、不明白甚至是错误的内容,请评论指出或私信给我也行,我会及时改正的。正文 首先在理解Java的IO框架之前,我们先复习一下计算机的构成。冯·诺依曼计算机模型:运算器:计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件(ALU) 控...
2020-05-28 15:39:15
425
原创 Android之AlertController的源码学习记录
这里节选了AlertController的源码,它是AlertDialog.Builder中非常重要的工具类,主要作用是根据Builder中配置好的参数来生成对应的Dialog。我节选下面这段代码的原因就是因为我们通过AlertDialog.Builder创建的dialog,只要点击Positive、Negative、Neutral等按钮就会触发dismiss方法,然后自行关闭。。。虽然大家都知道点击按钮之后会触发dismiss,但是估计很少有人知道dismiss方法是通过什么方式触发的吧。。。所以我.
2020-05-27 11:09:01
576
转载 Android原生Dialog的使用
/** * 两个按钮的 dialog */ private void showTwo() { builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle("最普通dialog") .setMessage("我是最简单的dialog").setPositiveButton("确定(积极)", new DialogInterface.O.
2020-05-27 09:12:29
286
原创 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
2257
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
3869
原创 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
2643
2
原创 基于SliderLayout,DIY了一个视频、图片混合轮播控件
项目的Github地址我从原先的项目中fork了一个分支出来,增加了视频播放的功能(VideoSliderView类)使用方法非常简单:VideoSliderView videoSliderView = new VideoSliderView(this);videoSliderView.video("android.resource://" + getPackageName() + "/" + R.raw.testvideo) .setScaleType(Ba
2020-05-16 17:35:02
350
原创 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
1379
原创 2020年4月30日持仓记录
昨天晚上美股走势爆炸强,导致我上个月在美股亏的钱,基本都回来了。今天早盘A股也是高开。。。很奇怪啊,突然走出一片牛市行情,仿佛病毒不存在一般。。。新冠病毒:我不要面子的吗?我也是在今天早上趁势卖掉了美股的基金。不过由于假期的关系,要到5月13号才能结算完成。。。 ...
2020-04-30 10:08:02
321
原创 2020年4月29日持仓记录
昨天基金账户中的三个基金全部回归正收益了,其中一个美股基金的收益刚从回到正收益,但是估计今天晚上又得变回负的。。。另外今天的大盘确实强了很多,走出来普涨的感觉,但是我买的这只股不怎么样。。。走势很弱。我今天也是又从股票账户中把提出了1000元。。。打算分批买入到基金账户中去。。。因为我感觉基金还是比较稳的 ...
2020-04-29 11:01:10
264
原创 2020年4月28日持仓记录
今天早上的深V走势确实是吓走了不少人。。。如果下午能保持住这个样子,收盘一个大长腿,明天应该会走一个高开今天从股票账户中提取了300+,买到了基金账户去,主要是加仓了上证50etf。。。...
2020-04-28 14:04:17
124
原创 今天学到一个新姿势(划掉)知识
当我们要对某一个对象进行一系列操作的时候,通常要怎么做呢?比如对一个“电脑”对象进行打字操作,一般的流程是这样的:computer.power();//通电开机computer.setInputMethod();//设置输入法computer.pressKey();//敲击键盘打字这类操作写下来。。。代码就变得不优雅了呀!!!而且随着你的操作越来越多,这些代码会越来越长。并且如...
2020-04-27 17:38:34
189
原创 今天记一个技术无关的博客
今天我发现我的股票账户和基金账户的市值差不多了。。。所以打算以今天作为一个原点,来记录基金与我自己操盘的股票看看谁的涨幅会在未来更高...
2020-04-14 14:47:25
124
原创 记录一下 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
4582
原创 如何在Android项目中配置BuildConfig常量
在AndroidStudio中构建项目的时候,可以通过build.gradle来配置一些常量,用于全局使用,比如说APP的版本号、作者名、公司名等等。那么怎么实现这些配置呢?首先我们打开android项目app目录下的build.gradle文件apply plugin: 'com.android.application'android { compileSdkVersion...
2020-04-06 18:55:40
3653
原创 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
5166
1
原创 TextureView.setTransform(Matrix transform)方法的作用
今天在学习Github上大佬的代码的时候,发现了一个方法Texture.setTransform() /** * <p>Sets the transform to associate with this texture view. * The specified transform applies to the underlying surface ...
2020-03-26 13:55:01
3902
原创 Dialog的弹出位置控制
Dialog一般出现都是屏幕中心,但有的时候我们希望它能在屏幕左侧,或者右侧亦或者是屏幕顶部。这时候我们就需要用的Dialog.getWindow().getAttributes()方法啦dialog = new Dialog(getActivityContext());dialog.setContentView(localView); //下面的几个属性可能也会经常用...
2020-03-25 19:08:51
10420
原创 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
3101
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人