Android
文章平均质量分 77
wh义华
观千剑而后识器,操千曲而后晓声。
展开
-
fragment常用知识点
在上面的场景中,如果name传2,flag传0,那么会找到BackStackEntry{d274363 #2 2}对象,flag为0表示将当前这个BackStackEntry对象保留在回退栈中,那么此时,只会将fragment3出栈,界面显示fragment2.有了对commit的理解就很好理解commitAllowingStateLoss方法了,该方法允许丢失Fragment状态,故也没有强制必须要在activity保存状态前提交,相当于提交的时机没有那么多的限制。方法时,该事务会立即执行。原创 2023-12-11 11:13:27 · 896 阅读 · 0 评论 -
android aidl及binder基础知识总结
binder是android framework提供的,用于跨进程方法调用的机制,具有安全高效等特点。我们知道,在 Android 系统中,每个应用程序都运行在一个独立的进程中,各个进程之间需要进行数据交换和调用,以实现各种功能。为了实现这个目的,binder应运而生。1、一个类要想序列化就要实现Serializable或Parcelable接口,同理一个类要想提供跨进程服务,就必须继承binder类。binder就像一个标记类一样,只要继承了,就有资格在进程间通信了。原创 2023-05-25 14:14:29 · 1037 阅读 · 0 评论 -
TextView使用textApperance属性设置字体颜色失效
textview通过textApperance属性设置字体颜色不生效问题。原创 2022-04-30 14:15:23 · 1470 阅读 · 0 评论 -
android构建工具gradle基础知识
gradle概述gradle是一个开源的通用构建工具,可以构建几乎任意类型的产物。针对不同的场景,gradle使用不同的插件和DSL申明配置来共同完成构建。gradle有如下几个特点:高性能基于jvm,故需要java环境基于协议,即build.gradle中的配置申明等。可扩展,如自定义task及action,自定义插件等。可视化,构建的阶段及task等都可追溯,查看耗时及执行情况等。IDE支持,大部分的IDE都支持gradlegradle的安装gradle是基于groovy语言,而原创 2022-04-30 13:49:44 · 2582 阅读 · 0 评论 -
scroller基础知识点
1、scroller概念scroller是对滑动操作的一种封装。它记录滑动过程中view应有的偏移量,但不主动作用于view。需要额外的操作将这些偏移量设置给view,从而产生滑动现象。2、scroller的使用3、scroller结合touch event事件4、demo演示5、注意事项5.1、scoller移动方向与符号的问题参考https://blog.csdn.net/yanbober/article/details/50419117...原创 2022-01-13 12:03:59 · 2833 阅读 · 0 评论 -
apktool使用注意事项
1、apktool的下载及安装apktool是一个反编译apk文件的工具,可以在其官网查看介绍及下载。现在下载下来的是一个jar包,需要在命令行中执行java -jar 指定apktool的jar包来运行。但是经常用这个命令的情况下,不是很方便。故网上有博客(忘了是哪里看的了,感谢原作者)使用bat脚本包装了一下调用命令,代码如下:@echo offset PATH=%CD%;%PATH%;java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8原创 2021-10-26 10:59:35 · 1448 阅读 · 0 评论 -
android事件分发基础知识点
1.单个view捕获触摸事件除了通过覆写onTouchEvent()方法外,还可以通过setOnTouchListener()方法设置OnTouchListener监听器来监听相关的事件。注意:如果设置的onTouchListener中 ACTION_DOWN 返回了false,那么后续就接收不到 ACTION_MOVE 和 ACTION_UP事件。2.使用GestureDetectorCompat检测所有支持的手势代码示例public class MainActivity extends Act原创 2021-08-01 14:09:41 · 110 阅读 · 0 评论 -
关于seekbar的thumb被截取的问题
最近在项目中使用了别人些的seekbar,发现seekbar的thumb的左右均被截取了一部分,非常不美观。在网络上查了一下资料,大部分是将android:thumbOffset设置为0,基本可以得到正确的结果。但是如果同时设置了padding的话,那么可能还是会有截取或者不对齐的问题。 于是学习了一下源码,做点笔记。首先搞清楚了thumbOffset的作用是啥?通过源码的drawThumb方法可以看出,mThumbOffset可以让thumb绘制在padding范围外。 通过这里也可以看出,将th原创 2021-07-31 13:08:09 · 1273 阅读 · 0 评论 -
关于android事件分发中mFirstTouchTarget的理解
今天在做跟随手指移动view的demo时发现,view会有剧烈的抖动。原创 2021-07-28 15:25:06 · 1108 阅读 · 2 评论 -
android 双击事件分析及三击事件识别
在android中,经常需要使用双击来响应一些操作,此时就可以使用系统提供的GestureDetector类来实现。在GestureDetector类中,定义了OnGestureListener 和 OnDoubleTapListener 两个接口,可以根据需要分别实现不同的接口。其中 OnGestureListener 对象的注入是通过构造方法的方式,而 OnDoubleTapListener 对象的注入是通过set方法设置的,见如下图片。(android也提供了一个实现这两个接口的类来简化原创 2021-06-09 20:38:27 · 1760 阅读 · 0 评论 -
关于Bitmap采样的问题
最近在使用bitmap采样时发现,采样后的大小比采样前还要大。 这是怎么回事呢? 原来是我忽略了一个相关知识点。代码如下:BitmapFactory.Options options = new BitmapFactory.Options();// 设置仅解码宽高。 在options中有in开头的属性,一般是用来设置的。 带out开头的属性一般是输出相关信息的。 options.inJustDecodeBounds = true;// 设置后,这次decode会返回null,所以不要使用此时返回的b原创 2021-03-16 11:14:30 · 357 阅读 · 0 评论 -
android自定义animation
1、什么是自定义animation在android中,系统提供了一些可以直接使用的animation,如TranslateAniamtion、ScaleAnimation、AlphaAnimation及RotateAnimation。这四种动画对应着平移、缩放、渐变及旋转动画。 在开发中,我们只需要定义好animtion对象,便可以在view上调用startAnimation来实现view的动画。但如果有些动画,不能用这些动画实现该怎么办呢? 如一些曲线类型的动画。那么,我们可以通过自定义的anima原创 2021-03-13 14:54:29 · 550 阅读 · 0 评论 -
android 自定义view仿支付宝写五褔及播放
本文记录一下实现仿支付宝写五褔及回放的过程。先看效果如下,没有找到相关的背景图,只能以田字格当作背景。整个过程分为两部分,一部分是写字,一部份是回放。 该过程主要使用了path和pathmeasure类,在网上有很多写的非常好博文可以参考。自定义view的源码见文末链接,此处只摘取部分代码记录,以便后续参考和温故。首先,实现写的过程。@Overridepublic boolean onTouchEvent(MotionEvent event) { int action = event.原创 2021-03-06 15:21:55 · 522 阅读 · 0 评论 -
android 自定义view仿支付宝支付结果动画
本文记录一下仿支付宝支付结果动画过程。效果如下:首先,实现一个首尾互相追赶,忽长忽短的动画过程。 (与google的等待动画相似)这里通过canvas的drawArc方式实现, 该方法签名如下:public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint) { super.drawArc(oval, st原创 2021-03-04 23:30:22 · 390 阅读 · 1 评论 -
android 自定义view实现刮刮卡效果
本文记录一下自定义View实现刮刮卡效果的过程。刮刮卡的实现主要是通过图像的混合来实现,但是在实现时有诸多细节需要注意。 通过分析生活中的刮刮卡效果,可以大概知道,灰色的蒙层是一层图像,而手势摸过的地方又是一层图像。 通过合适的混合模式就可以实现刮刮卡的效果。我们知道手势可以通过path绘制到canvas上,那么如何将手势绘制的图像输出到一张图像上呢?可以通过传入空的Bitmap到Canvas的构造函数中,然后将手势轨迹画到这个canvas上,那么该bitmap上就会有相关的轨迹了。具体代码如下:原创 2021-03-01 14:57:24 · 356 阅读 · 2 评论 -
关于http请求头Content-Type的基本知识
1、背景最近在使用一个okhttp网络框架时,在拦截器中打印post数据发现数据均经过了编码,打印出来的是类似如下的字符loginName%22%3A%22hello1124%22%2C%22mac%22%3A%2294%3Abe%3A46%3A15%3A15%3A20%22%2C%22pId%22%3A%225602923243413443840%22%2C%22对比原数据发现,只有其中部分数据被编码过了。 为什么会这样?2、Content-Type与数据编码后来查看其源码发现有如下代码:r原创 2021-02-23 20:07:09 · 2206 阅读 · 0 评论 -
使用itemdecoration实现时间线效果
代码如下:// 时间线装饰器public class TimeLineDecoration extends RecyclerView.ItemDecoration { private Paint mPaint; public TimeLineDecoration() { mPaint = new Paint(); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.BLUE);原创 2021-02-20 09:36:43 · 253 阅读 · 2 评论 -
ItemDecoration用法
1、ItemDecoration概念在使用RecyclerView显示列表的时候需要分隔线隔开item,此时则可以使用Recycler的内部类ItemDecoration。ItemDecoration是android系统提供的基类,用于绘制RecyclerView的分隔线,我们可以通过继承ItemDecoration实现丰富的分隔线效果。(系统也提供了实现好的DividerItemDecoration使用。)2、ItemDecoration的使用使用ItemDecoration时,需继承此类并覆写其中原创 2021-02-19 11:09:13 · 4333 阅读 · 12 评论 -
将json字符串转化为hashmap的问题
最近在开发时遇到一个问题, 简化如下:String v = "{\"hello\":1,\"world\":\"2\"}";Map<String, String> mapCur = JSONObject.parseObject(v, HashMap.class);System.out.println("map size : " + mapCur.size());StringBuffer sb = new StringBuffer();sb.append(mapCur.get("hell原创 2021-02-19 10:02:46 · 3233 阅读 · 0 评论 -
获取泛型具体类型
先确定一点,也即泛型是在编译时就确定的。任何在编译时不能确定的写法,最后尝试获取泛型子类时,可能获取的就是T,也即泛型标识符。有如下代码:interface callback<T> { // 某个带泛型的接口}class callbackImpl<T> implements callback<T> { // 如果在这个类中尝试获取泛型,那么要看编译时T是否是确定的。 }public static void main(String[] args) {原创 2021-02-19 09:51:57 · 4012 阅读 · 0 评论 -
AlarmManager用法的注意事项
1、概述2、不重复定时操作3、重复定时操作4、triggerAtMillis参数问题5、adb查看闹钟信息6、总结原创 2021-01-11 19:08:48 · 2081 阅读 · 0 评论 -
命令行签名apk文件
使用jarsigner签名apk文件使用的签名命令如下:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 这里是签名文件的路径 --keypass 签名文件密码 --storepass 签名文件密码 待签名.apk --signedjar 签名后文件(不指定则在原文件上修改).apk youralias(这里还有一个参数,传入签名文件的alias)使用如下命令校验签名结果:jarsigner -verify -ve原创 2020-12-01 17:19:28 · 727 阅读 · 0 评论 -
升级Android Studio 4.1后无法调试应用的问题
在升级了Android Studio 4.1后突然无法调试应用了。build.gradle文件中debuggable与minifyEnabled均已正确设置,android studio中的attach process也能正解attach,但就是不能调试。后来通过查找,原来在attach process要选择相应的配置。 如下上面选择了Create New后,就可以选择下面的Debug Type了。具体可以查询官网的调试说明。按照如上设置之后,项目就可以调试了。参考:1、android st原创 2020-11-20 14:59:31 · 3044 阅读 · 4 评论 -
关于AlarmManager中发送BroadcastReceiver的问题
将静态注册的广播更改为了动态注册,于是将AndroidManifeset.xml文件中广播的申明去掉了。后来由于某些mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);Intent it = new Intent(this, TimeReceiver.class);PendingIntent pi = PendingIntent.getBroadcast(context, 0, it, PendingIntent.FLAG_U原创 2020-11-19 19:12:53 · 969 阅读 · 0 评论 -
查看bugly依赖库版本及查看线程cpu使用状况
在项目中使用了bugly,使用方法是通过gradle依赖引入的,如下‘com.tencent.bugly:crashreport:latest.release’这也是bugly官方文档建议的接入方式,这样的方式在打包时则会引入库中最新的版本。但是安装包在某定制rom上运行时,不断切换wifi,怀疑bugly在new thread。后通过去掉bugly证实。然后去官网查看bugly版本信息,但是使用如上的方式引入时无法直观的查看到版本。于是通过jadx客户端查看相关代码,在com.tencent原创 2020-09-25 11:12:42 · 379 阅读 · 0 评论 -
Android 应用退出方式
在应用退出时遇到了如下的问题System.exti(0)以及Process.kill(os.android.myPid())会导致进程重启。很怪异,不知道为什么。这个要深入分析一下了,不能不了了之。原创 2020-09-22 15:46:41 · 339 阅读 · 0 评论 -
android应用数据清理
删除文件操作/*** 删除文件夹下的文件,不对文件夹处理* @param directory*/private static void deleteFilesByDirectory(File directory) { if (directory != null && directory.exists() && directory.isDirectory()) { for (File item : directory.listFiles()) {原创 2020-09-03 10:22:39 · 1400 阅读 · 0 评论 -
ContentProvider的使用
1、ContentProvider概念content provider类是android提供的四大组件之一,用于跨进程的内容分享。 通过content provider提供的机制,统一对外的数据接口,可以方便安全的分享或获取其他应用的数据。 一般如果没有暴露数据给第三方的需求,其实很少会用到这个类。2、ContentProvider类使用contentprovider同其他组件一样,需继承ContentProvider并实现相关方法即可。 如下上面的方法中包含了常用的增删改查等,我们根据需要完成相原创 2020-08-18 11:22:46 · 4016 阅读 · 0 评论 -
Java中的正则匹配
正则匹配正则匹配即是在给定字符串中查找符合正则表达式的字符。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则匹配常用类正则匹配中常用的类为Pattern和Matcher类,前者表示匹配的模式串,后者表示匹配的结果。常用的使用方法如下:// 待查找字符String fileName = "workspace/test.apk";// 构建模式,其中compile方法还可以原创 2020-07-24 14:58:55 · 11563 阅读 · 0 评论 -
Handler相关知识
1、概念Handler可以通过与线程相关的MessageQueue发送和处理Message和Runnable对象。通过这种机制,Android可以在相同进程中不同线程间通信。2、Handler对象的构造3、MessageQueue4、Message5、Looper6、UI线程中的Handler对象7、注意事项在一个handler对象上removeMessage时需要注意的是,只能该handler对象的messgae。当出现message不能删除的时候,要检查一下该message是不是关联到当原创 2020-05-29 10:41:49 · 241 阅读 · 0 评论 -
MD5值Python与Java计算的结果不一致的问题
使用如下python代码计算文件的md5值import hashlib# 获取文件的md5值def getmd5(file): m = hashlib.md5() with open(file,'rb') as f: for line in f: m.update(line) md5code = m.hexdigest() return md5code在java中使用如下方法获取md5值/** * 获取文件的md5值 *原创 2020-05-25 10:44:19 · 3210 阅读 · 3 评论 -
Android签名方式
1、certutil -hashfile /? 查看相关哈希函数命令。将android安装包解压(直接解压,不使用apktool等工具),在META-INF文件夹下有MANIFEST.MF文件。其中记录了android打包后各个文件的文件摘要(sha1后再转base64)。(在window上验证时,certutil可以正确计算出sha1值,但是base64时与MANIFEST.MF中的不符,但...原创 2020-04-21 18:37:33 · 521 阅读 · 0 评论 -
adb常用命令
adb logcat -s tag关键字打印tag关键字的logadb logcat -c清屏log数据adb shell pm clear 包名清除应用数据adb shell dumpsys activity top打印栈顶activity,包含了包名等信息。adb shell dumpsys package 包名打印某个包的具体信息。adb shell...原创 2020-04-21 18:35:50 · 942 阅读 · 0 评论 -
ImageView的src与background的区别分析
1、概述在日常开发中, 我们经常用到ImageView的src和background属性。从名称上,可以看出background是作为背景展示的,而src是作为内容源,个人理解为前景展示的。所以,二者都可以用来展示某个drawable。但是,对于不同大小的ImageView二者的表现却有很大的区别。2、android:background属性该属性即为ImageView设置相应的背景,可以为图片也可原创 2016-03-12 17:21:37 · 14131 阅读 · 1 评论 -
Android数据库升级总结
Android数据库升级原创 2016-03-12 15:13:00 · 3090 阅读 · 0 评论 -
adb常用命令
adb 开发常用命令原创 2017-10-17 08:59:30 · 389 阅读 · 0 评论 -
VectorDrawable基础知识
1、概述VectorDrawable是用xml文件定义一系列点、线、曲线及其颜色信息的矢量图。其最主要的优点是缩放不损失图片质量。我们也可以通过使用多个xml矢量图文件来做动画,从而避免适配多分辨率使用多张图片。 从android 5.0(api 21),系统提供了VectorDrawable与AnimatedVectorDrawable来支持矢量图。2、 关于VectorDrawableVecto原创 2017-10-14 09:18:29 · 2030 阅读 · 0 评论 -
Charles的基本使用
1、Charles简介Charles是一个Http代理、监视及反向代理的工具软件,可以通过其查看设备和Internet之间所有Http和Https的网络传输数据,包括请求、响应及http请求头等。2、Charles基本使用通过Charles标题栏中的help,可以查看电脑本机local ip,在手机wifi设置代理时即填写该ip地址,端口默认为8888。 此时进行网络访问时均可以在Structur原创 2017-10-14 09:45:01 · 2081 阅读 · 0 评论 -
系统权限官网知识点
1、如果应用在AndroidManifest.xml中申明了非危险权限,应用会自动授权,如果是危险权限,那么应用会通知用户主动授权该权限。android系统主动通知用户进行授权的方式取决于android系统版本以及应用的target sdk版本。1.1 、如果设备是android 6.0(api level 23)或者更高,并且应用target sdk是23或者更高,应用会在运行时申请权限。用户可以原创 2017-12-16 08:54:10 · 343 阅读 · 0 评论 -
动态添加RadioButton
1、问题在添加数量不确定的RadionButton,或者需要对RadioButton样式化(如添加selector等)时可以考虑动态添加RadionButton。2、具体代码for (int i = 0; i < mCourseList.size(); i++) { RadioButton radioButton = (RadioButton) inflater.in...原创 2018-05-28 08:00:22 · 3880 阅读 · 0 评论