自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 java反射

JAVA反射机制就是在运行状态中,对于任意一个类,都能知道这个类所有的属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性,这种动态获取的信息以及调用对象的方法的功能称为JAVA反射机制。

2024-07-16 16:52:55 571

原创 Android中的drawable

drawable是一种可以在Canvas上进行绘制的抽象的概念,颜色图片都可以是一个drawable,Drawable可以通过XML定义,或者通过代码创建,Android中的drawable是一个抽象类,每个具体的Drawable都是其子类优点:使用简单,比自定义view成本低,占用空间小,可以减少apk大小一般作为ImageView的图像来显示另一个是作为View的背景自定义Drawable主要就是实现draw方法。

2024-04-11 15:06:20 1044

原创 java以及android类加载机制

当一个符合java虚拟机规范的字节流文件,经历加载,验证,准备,解析,初始化这些阶段相互协作完成之后,加载阶段读取到的Class字节流信息,会按虚拟机规定的格式,在方法区保存一份,然后会在java堆中,会创建一个java.lang.Class类的对象,这个对象描述了这个类所有信息,也提供了这个类在方法区的访问入口。

2024-02-18 14:30:43 1007 1

原创 前途光明我看不见,道路曲折我走不完

今年开始思考了一些问题,未来应该安定于何处,应该寻找怎样的配偶。目前还没有想到答案,时间应该会将答案交给我。今年在工作上承担了更多的工作,慢慢的已经可以独当一面了,对自己应该学习的东西了解的也更多了。工资也小小的增加了一些。今年发布了7-8篇文章,在文章的记录上也更加的趋向于原理,只有原理可以更好的驱动我们成长。今年读完了平凡的世界,明朝的那些事儿也看了一部分。要多看书,从书中获取更多知识。今年去到了更多的城市,见到了各个城市的样貌。看到了自己心心念念已久的景色。2023年最后一天了,今年即将结束。

2023-12-31 15:06:17 446

原创 WorkManager调度任务

WorkManager是jetpack 中的组件之一,主要用于后台处理任务。适用于后台处理操作的推荐apiWorkManager最低能兼容API Level14,低于API23 WorkManager会使用AlarmManager + Broadcast Receiver 完成任务,高于API23使用JobScheduler来完成任务。两种方案最终都是调用Executor来完成任务。

2023-11-24 14:39:38 137

原创 Glide加载图片占位图问题,CustomViewTarget加载图片占位图问题

Glide加载图片时通常会设置占位图。

2023-11-08 17:57:54 950

原创 性能优化-卡顿优化-tarce抓取及分析

性能优化(卡顿分析)

2023-10-18 16:08:16 1718

原创 JVM内存管理

能和用户线程并发执行。程序计数器是一块占用内存较少的空间,可以看成是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变当前程序计数器的值来选取下一条要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都是依赖程序计数器来完成的。Java虚拟机的多线程是通过线程轮流切换,分配处理器的执行时间来完成的,在任意一个确定的时间内,一个处理器只会执行一个线程的指令,因此,为了线程切换后能恢复到正确的执行位置,所以每个线程都有一个独立的程序计数器,每个线程的计数器互不影响,线程私有。

2023-10-08 19:11:06 173

原创 View实现圆角的几种方式

android圆角实现

2023-08-30 18:17:08 2328

原创 Exoplayer在低端机型上未正常释放导致的ANR

找到原因解决问题就简单了,只要在对应杀进程前先调用播放器的release方法,该问题就会修复。此问题只会发生在一些低端机型上,大部分机型对medecodec的兼容都做得比较好,不会有该问题。通过issue可以发现是没有调用播放器的release()就强制杀了进程,导致medecodec进入了错误的状态,导致该问题发生。通过trace可以看到,anr发生在waitUninterruptibly,通过源码发现是卡在wait方法中。在exoplayer的githubissuue中发现有类似问题。

2023-07-10 10:34:50 258

原创 记录一次Android视频播放音画不同步问题的定位及分析

音画不同步,ffmpeg

2023-02-22 15:16:48 1984 2

原创 使用mat分析hprof文件

内存泄漏, MAT工具,hprof文件分析

2023-02-07 14:13:39 2518

原创 android系统中执行脚本文件

android 执行脚本

2023-02-07 10:28:43 4021

原创 Android sdk 生成api doc文档

Android生成apidoc

2022-11-02 11:18:00 741

原创 Android gradle相关

gradle

2022-08-31 16:53:09 623

原创 Git拉取项目太大超时下载不下来

git clone 超时 项目太大

2022-08-23 10:34:08 2745

原创 tcpdump抓包,Android抓包不用设置代理

tcpdump是一种用来截取网络分组,并输出分组内容的工具。tcpdump抓包工具从筛选条件来分类,主要有三大类。一是针对关键字,譬如主机名(HOST)、网段(NET)、端口(PORT);二是针对包的方向,譬如源地址(src)、目的地址(dst),且可以支持逻辑运算符号(src and dst、src or dst)。三是针对协议进行抓包,譬如抓取tcp/udp/imcp等协议的数据包。tcpdump 常用命令参数:-D :展示可供抓包的端口-n :将网络地址以数字形式展示。...

2022-08-17 14:00:46 4133

原创 Android MVI架构解析以及与其他架构对比

mvc mvp mvvm mvi 架构

2022-08-04 15:22:57 4622 4

原创 java并发之CountDownLatch 和Semaphore定义及使用

java并发信号量

2022-07-07 15:45:04 817

原创 Android am start命令

am start

2022-07-04 18:40:40 2463

原创 记录android导入依赖的一些事

android 依赖

2022-07-01 17:22:58 1100

原创 项目中两个aar混淆后类名方法名相同导致的java.lang.NoSuchMethodError:

java.lang.NoSuchMethodError: No virtual method a(La/a/a/a$d;ZLjava/lang/String;Ljava/lang/String;)V in class La/a/a/a; or its super classes项目中引入一个aar运行时闪退,报了NoSuchMethodError,但是在demo中却没问题。反编译生成的apk后发现有两个相同的a.a.a.a(context)方法导致的闪退。可以在aar中改变混淆规则即可解决这个问题。

2022-04-22 15:01:37 2373

原创 Android Studio直接run没有把aar中的so文件打包进去

引用aar时,出现一个很奇怪的问题,run起来后aar中的so文件打包不进去。尝试执行assmbleDebug打包出来apk,发现so打包到apk中了。通过尝试,armeabi或者armabi-v7a文件夹下的文件,即32位无法打入到apk,但是如果是arm64-v8a,即64位则可以打入到apk。查了一下资料,直接run的话android studio会通过adb获取到你的测试手机的cpu类型,然后只打包你手机cpu类型的so文件。如果在build.gradle中写了cpu类型就会按照你写的来打

2022-04-21 18:37:02 3563

原创 Android多渠道打包-修改生成的aar的名称

Android开发中,在打包aar时想给生成的aar加上版本号,打包类型之类的信息时可以采用。在module的build.gradle的android标签中加入下述代码android.libraryVariants.all{ variant -> variant.outputs.all { outputFileName = "xxxx" + defaultConfig.versionCode + "@" + defaultConfig.ver

2022-02-17 15:39:49 2828

原创 Android Studio so文件打包进aar

项目中需要将so文件打包进aar需要做的配置 。将so文件放在src/main/jniLibs目录下,build.gradle文件中添加配置代码执行此命令就可以打包进aar

2022-01-07 10:33:15 2613

原创 Android插件化(二、开源插件化框架Qigsaw)

Android app bundle(aab)aab是谷歌提出的动态发布方案,是一种改进的应用程序打包方案,可以大幅度减少应用程序体积。优点size更小安装更快支持动态发布限制仅限于通过Google Play发布的应用最低支持Android 5.0低于Android5.0的Google会优化大小,但是不支持动态交付Android app bundle(aab 原理)已知问题:不支持动态修改 resource tables在 dynamic feature 模块的清单文件里

2021-11-16 13:32:04 2887 2

原创 Android插件化(一、插件化基本原理)

插件化简介插件化概念插件化开发就是将整个app拆分成很多模块,每个模块都是一个apk,最终打包的时候将宿主apk和插件apk分开打包,插件apk通过动态下发到宿主apk。插件化优点宿主和插件分开编译可并发开发,都是apk,开发互不影响(宿主需要给插件下发一个context)动态更新插件按需下载模块可解决方法数超过65536的问题插件化难点插件化需要解决的问题插件中代码的加载与主工程的相互调用插件中资源的加载与主工程的相互访问四大组件生命周期的管理解决方法插件中代码的加载

2021-11-15 15:40:10 6129

原创 adb shell top命令详解

Tasks: 552 total, 1 running, 510 sleeping, 0 stopped, 0 zombie任务(进程) 系统现在共有552个进程,其中处于运行中的有1个,510个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。Mem: 5849960k total, 4014628k used, 1835332k free, 5756k buffers内存状态: 物理内存总量 (5.6G) 使用中的内存总量 空闲内存总

2021-08-31 10:10:33 674

原创 Android IPC机制

一.简介IPC: 进程间通信或者跨进程通信指两个进程间进行数据交换的过程ANR: Android主线程才能操作UI,如果把大量耗时任务放到主线程中执行就会造成界面无法响应,导致ANR的发生。Android中进程间通信方式最有特色的是Binder,除此之外还支持Socket通信。二.Android中的多进程模式2.1.Android使用多进程的方式在Andorid中使用多进程只有一种方法,给四大组件在AndroidManifest中指定android:process属性。声明process时没

2021-06-25 11:55:12 153

原创 Android View(View的事件分发机制)

1.View的基础知识View的位置参数由该图可以得到,View的宽高为:            width = right - left            height = bottom - top坐标:getX/getY返回的是相对于当前View左上角的x和y的坐标,而getRawX和getRawY返回的是相对于屏幕左上角的x和y坐标。TouchSlop:系统所能识别的滑动的最小距离,滑动距离太短,系统不认为在滑动。获取常量:ViewConfiguration.get(getConte

2021-06-23 14:58:35 211

原创 Android View(View的工作原理)

1.AndroidUI管理系统的层级关系1.1.主要对象介绍(1)PhoneWindow:Android系统中最基本的窗口系统,继承自Window类,负责管理界面显示以及事件响应,是Activity和View系统交互的接口。(2)DecorView:PhoneWindow中的起始点View,继承于View类,作为整个视图容器使用,用于设置窗口属性,本质上是一个FrameLayout。(3)ViewRoot:在Activity启动时创建,负责管理布局,渲染窗口UI1.2.ViewRoot与Deco

2021-06-18 17:18:54 144

原创 利用开源库IText生成pdf文件并写入内容

android原生对于pdf的支持很少,只支持将控件生成图片写入,对于直接写入文字内容支持不好,所以就用了开源库IText,jar包可以直接去官网下载。下载后导入项目即可。/**param contemt 需要写入的内容,param reportAddree 生成的pdf保存的路径**/ public static void generatePdfReport(String content, String reportAddress) { Document document = new

2021-04-13 15:40:01 530

原创 RecyclerView嵌套Recyclerview出现的问题记录以及解决

1.滑动冲突RV嵌套RV导致滑动冲突,内部滑动失效。解决方法:滑动冲突解决2.父RV与子RV竞争焦点导致展开某一项时向上展开。解决方法:在xml中父RV添加android:descendantFocusability="blocksDescendants"禁止子RV竞争焦点即可。3.父RV调用notifyDataSetChanged()时,子RV的数据会跳回顶部第一条数据,这是因为RV的item在竞争焦点导致,如果是单层RV的话,可以在itm的父布局添加android:descendantFocu

2021-04-13 15:28:05 770

原创 AndroidRecyclerview嵌套Recyclerview滑动冲突的解决。

当Recyclerview嵌套recyclerview滑动子布局是本应该是子布局在滑动,现象却是父布局在滑动。出现这种情况的原因就是事件没有分发到子view。解决这个问题就需要了解android事件分发的机制。1.Android事件分发的机制Android事件分发机制要研究的对象是MotionEvent即点击事件。点击事件就是手指触摸到屏幕出现的一系列事件ACTION_DOWN:手指刚接触到屏幕ACTION_MOVE:手指在屏幕上移动ACTION_UP:手指从屏幕上离开的瞬间点击事件的分发也就是

2021-03-29 09:49:55 4086 2

原创 android多媒体(播放视频)

Android多媒体的编写主要是播放器的选择,总的来说有两种选择。1.选用android原生videoview控件,这是最简单的办法,但是videoview的功能有限,涉及到一些操作是无法实现的。videoview实现很简单。代码如下。布局文件中声明控件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

2021-02-25 09:53:56 290

原创 多媒体适配视频尺寸后出现的一些问题。

1.分屏后画面边缘显示桌面背景surfaceview 设置了透明属性导致。mImageSubtitleSurfaceViewOne.getHolder().setFormat(PixelFormat.RGBA_8888);去掉即可。2.分屏后不会适配视频尺寸,导致画面被挤压或拉伸。外部设置videoview的params导致。public void setVideoDisplayFullScreen(int viewId) {Log.i(TAG, "---setVideoDisplayFu

2021-02-24 11:43:12 383

原创 Kotlin学习(一)

一.kotlin变量与函数1.变量kotlin变量只有两个类型var(variable)和val(value),val声明的类型不可重复赋值(类似于java的final), var 声明的变量可以重新赋值。kotlin有类型推断机制不需要声明变量的类型,它会根据你赋的值确定变量的类型。var a = 3这样变量a就会被推断为Int类型,如果你在重新赋值 a = 1.0 就会报类型不匹配的错误。当然如果你声明的变量需要延迟赋值,也可以指定变量的类型:var b : Int = 10val c

2021-02-22 19:52:23 72

原创 android 使用handler和线程的原因

之前研究了android的handler和线程,但是一直没有使用到,也一直不理解为何要用。直到遇到了这个问题。Only the original thread that created a view hierarchy can touch its views来由是视频播放控制栏使用了popwindow 然后需要在onprepare设置当前播放时间,也就是在主线程中访问数据,再设置另外一个view的画面就导致了这个问题,此时就用到了线程+handler。 private IMediaPlayer

2021-02-01 10:15:28 88

原创 android 多媒体播放视频视频画面被拉伸

原理是调整surfaceView大小。分为两种,一种是mediaplayer(ijkmediaplayer,exoplayer)+surfaceView,在onVideoSizeChanged()方法中调整surfaceView大小即可。1.//一定要在setOnVideoSizeChangedListener方法中调用mediaPlayer.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {@Ov

2021-02-01 09:59:34 3828

原创 android 第一次点击无效的问题

之前应用为了适配遥控控制,就在layout中的控件中加入了android:focusableInTouchMode=true 的属性,之后却发现第一次点击无效的问题。删除这个属性就没有这个问题了。查了资料发现问题出在View 在 onTouchEvent() 中的 MotionEvent.ACTION_UP中对focus做了处理,如果focusableInTouchMode是true时,会去请求焦点,而不会执行peformClick(),导致这个问题。...

2021-01-18 14:31:33 767

cn.trinea.android.developertools.apk

可以在android设备上显示布局边界,开启开发者选项,显示指针坐标,提取.so文件等一系列android开发者需要的操作

2020-09-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除