总结
文章平均质量分 73
zhuxingchong
进一步的探索你可能会发现新的世界。
展开
-
通用Adapter适配器
一、简介二、虚拟机内存模型三、内存回收GC内存回收算法四、内存调优原创 2021-09-03 10:42:21 · 427 阅读 · 0 评论 -
Android 系统分享框分享文件
Build.VERSION.SDK_INT >= Build.VERSION_CODES.N声明文件传输权限AndroidManifest.xml声明权限provider统一格式<provider android:name="androidx.core.content.FileProvider" <!--一般包名加.FileProvider(可以随便定义)--> android:authorities="com.dev.apkshare.FileP.原创 2021-08-02 13:10:59 · 1543 阅读 · 0 评论 -
ThreadLocal原理—使用
一、介绍 ThreadLocal是指线程局部变量,多个线程并发运行的时候,使用ThreadLocal装饰的变量在每个线程里都是单独使用的,Thread线程本身就是一个类,ThreadLocal是Thread里面的一个局部变量。所以ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的和普通的类一样的。由于每个线程拥有了自己的变量,所以消除了多线程情况下的竞争关系。原理ThreadLocal这个类主要做用为key泛型ThreadLocal<T>,都是作为ThreadLo..原创 2021-06-18 16:09:01 · 355 阅读 · 1 评论 -
Android应用启动流程一次看透
应用启动流程1.1、冷启动和热启动冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动。 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动对应的进程组件,这个方式叫热启动。...原创 2021-06-15 19:35:25 · 4572 阅读 · 2 评论 -
Android 应用多角度启动优化
一、简介1.1、冷启动和热启动冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动对应的进程组件,这个方式叫热启动1.2、启动速度测量1.2.1、TraceCompatTraceCo...原创 2021-06-03 19:31:10 · 1294 阅读 · 6 评论 -
差异化集成性能优化工具
差异化工具集成目录差异化工具集成介绍:一、差异化编译1.FlavorDimensions 的意义2.ProductFlavors 组合二、差异化配置1.Version维度配置版本相关信息4.Debug和Release版本调试工具配置三、常用三方库查询下载四、内存泄漏工具集成(1)LeakCanary内存泄漏工具接入使用(3)内存泄漏的判定机制(4)内存泄漏的轨迹生成机制五、Koom工具集成(1)Koom工具接入使用(2)Koom使用场.原创 2021-04-07 20:33:36 · 665 阅读 · 0 评论 -
java 高性能低内存高斯模糊
一、高斯模糊算法都是通用的没什么修改和调整的地方以下是常用高斯模糊算法fun blur(context: Context, bitmap: Bitmap?, radius: Int): Bitmap? { var radius = radius if (bitmap == null) { return null } if (radius >= 25) {原创 2021-02-10 10:22:34 · 541 阅读 · 0 评论 -
android 应用启动时间统计方法
一、代码埋点:二、TraceCompat三、使用python命令生成报告四、adb shell am start -w 包名/类名五、自定义统计时长一、代码埋点:开始收集,传入自定义文件名:Debug.startMethodTracing("app_trace");使用方式(非常耗时)结束收集:Debug.stopMethodTracing();默认文件生成:/sdcard/Android/data/com.xxx.xx/files/app_trace.trace使...原创 2021-01-16 14:08:43 · 1198 阅读 · 0 评论 -
Android Studio 完整的apk重命名-模块名+渠道+relase/debug+特殊字段+版本号+日期.apk
例如:Launcher3_aosp_release_v1.1.33_20201217.apkbuild.gradle里面重命名apk这样可以看出apk版本是否release和渠道日期版本ext {MODEL_NAME = "Launcher3-Orgin"OTHER_NAME = ""}"android.applicationVariants.all { variant -> variant.outputs.all { //时间 def d原创 2020-12-17 13:50:44 · 320 阅读 · 0 评论 -
MAT比较多个heap dump文件
MAT比较多个heap dump文件调试内存泄露时,有时候适时比較2个或多个heap dump文件是非常实用的。这时须要生成多个单独的HPROF文件。以下是一些关于怎样在MAT里比較多个heap dumps的内容1.第一个HPROF 文件(usingFile > Open Heap Dump ).2.打开Histogram view.图1. Histogram Viewbutton3.在NavigationHistory view里 (从Win...原创 2020-12-01 19:39:26 · 998 阅读 · 0 评论 -
generate signed Bundle apk点击编译apk无反应
一、编译的时候发现有些维度apk编译不出来,我这次遇到的就是编译release版本apk没有反应,最后排除发现是variant.setIgnore(true)导致的。最终发现build.gradle文件里面包含以下代码。android.variantFilter { variant -> if (variant.buildType.name.endsWith('release')) { variant.setIgnore(true); }}上面代码导.原创 2020-11-26 20:09:47 · 1235 阅读 · 0 评论 -
Service或自定义对象使用LiveData
一,LiveData绑定AppCompatActivity或Fragment使用有些情况我们需要在activity或service或其他对象上绑定使用。正常情况下使用,this是Activity带有生命周期该activity实现LifecycleOwnerpublic class ComponentActivity extends androidx.core.app.ComponentActivity implements LifecycleOwner, Vie原创 2020-11-23 19:42:17 · 2964 阅读 · 2 评论 -
获取图片亮度(亮色,正常,暗色)
两种方法获取图片亮度(1)获取图片区域像素点亮度值后求平均值,该算法可以调整public static boolean isDarkBitamp(Bitmap bitmap){ boolean isDark = false; try { if (bitmap != null) { int darkPixelCount = 0; int x = bitmap.getWidth() / 2; .原创 2020-11-12 09:03:37 · 4997 阅读 · 0 评论 -
android 内存优化详解
目录一、性能优化介绍二、JVM,内存回收机制GC2.1. JVM 内存模型2.2. JVM 内存区域2.2.1. 程序计数器(线程私有)2.2.2.虚拟机栈(线程私有)2.2.3.本地方法区(私有)2.2.4.堆(Heap-线程共享)-运行时数据区2.2.5. 方法区/永久代(线程共享)2.3. JVM运行时内存2.3.2. 老年代2.3.3. 永久代2.4. 垃圾回收与算法2.6. JAVA 四种引用类型2.7内存使用小结三、JAVA集合.原创 2020-10-24 16:19:40 · 884 阅读 · 0 评论 -
Android 解决输入法弹出导致布局上移,背景压缩,闪烁
介绍:通常情况下应用在调出输入法时应用布局会改变布局大小或配置布局适配输入法高度,如果应用有设置背景则会因为高度改变导致背景被压缩出现闪烁显示。下面这张图是我的布局全屏显示,主题是透明,设置一个遮罩层给背景,因为输入法弹出导致布局高度改变遮罩层背景也会改变高度,这个过程可以看到底部壁纸背景,如果我们强制设置布局大小为全屏就会引起输入法遮挡布局问题。解决方案:输入法弹出后我们的布局高度会被改变,所以会有一个过程可以看到背景闪一下。虽然布局大小改变了,但底部DecorView高度是不会改原创 2020-09-10 18:12:09 · 1875 阅读 · 0 评论 -
RecyclerView 导致内存溢出卡顿问题
该问题原因时RecyclerView不停调用onCreateViewHolder导致一次性创建大量ViewHolder导致内存溢出,有试过分页加载数据,这种如果快速滑动也会卡顿而且数据加载多了也会内存溢出。这里有一篇文章讲解这种现象的原因:https://www.jianshu.com/p/d115cfaafbd4总结:问题根本原因是ViewHolder没有复用,之所以没复用是因为LayoutManager计算高度有问题导致判断条件错误,我的遇到的问题也是布局导致的如下所示。<.原创 2020-09-03 10:07:49 · 1412 阅读 · 0 评论 -
android adb查看手机内存使用情况
1.查看设备节点内存adb shell df2.查看磁盘内存和运行内存:adb shell free3.查看内存详细数据adb shell cat /proc/meminfo原创 2020-08-05 17:25:51 · 19161 阅读 · 0 评论 -
解决Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifie
很明确是gradle版本引起编译报错问题,新导入AS后工程会因为gradle版本不兼容而无法编译,需要修改两个地方解决:1.打开工程目录gradle配置目录文件gradle-wrapper.properties,导入工程后distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip,修改成低版本distributionUrl=https\://services.gradle.org/distr.原创 2020-06-10 09:55:33 · 2841 阅读 · 0 评论 -
android 轻松获取jar或aar包
一个android项目引入第三方包时通过配置implementation'com.github.bumptech.glide:glide:3.7.0'就可以直接使用,如果包有更新也可以修改版本号同步下来用起来很方便,但有些情况我们确实需要下载jar或aar包放到本地lib库中编译,正常情况下我们会去网上找有没有人打包过分享了,或者下载源码自己打包,这个都不是最好的方法。下面我就分享下更好的方法下载...原创 2020-03-26 10:40:05 · 1182 阅读 · 0 评论 -
Android 内置第三方应用为系统应用默认赋予权限
一、内置应用分为以下几种:1.第三方合作可卸载应用2.第三方应用不可卸载应用3.第三方应用不可卸载并且不用动态申请危险权限应用通常厂商内置应用会放到vendor目录下再创建自己的目录名,把需要预置的apk放入对应目录,并编写对应的mk文件。应用是否可用卸载会根据类型最后拷贝到不同的目录下,例如system/app(不可卸载),system/third-app(可卸载),...原创 2020-03-13 09:18:15 · 6282 阅读 · 0 评论 -
Android AspectJ 常用埋点,拦截,监听注解使用
做一个学习记录:Android中的AOP编程 Android之AOPAndroid Studio 中自定义 Gradle 插件看AspectJ在Android中的强势插入jarryleo / MagicBuriedPointAspectJ 的两种用法(1)用自定义注解修饰切入点,精确控制切入点,属于侵入式;(2)不需要在切入点代码中做任何修改,属于非侵入式。侵入式侵入式用法...原创 2020-03-09 17:59:09 · 2277 阅读 · 0 评论 -
Android q Launcher最近任务栏移植
一、介绍因为从android p开始google就把最近任务栏功能移植到了Launcher应用模块中,所以Launcher应用升级到android q时最大的移植任务还是最近任务栏功能,最近任务栏和系统应用system ui有事件交互,例如导航栏相关的滑动相关事情都要传递到最近任务栏作为触发最近任务栏的事件。本次移植是从android p移植到android q版本,androd p版本...原创 2019-12-28 16:18:43 · 3389 阅读 · 1 评论 -
Android 性能优化多渠道差异化编译方法
一、介绍:最近做app性能优化增加了几个第三方性能检测框架:1、leakcanary(内存泄漏检测)2、blockcanary(耗时检测工具)因为项目开发时在android studio工具编译但在完整编译时是用make方式和整个项目一起编译,所以需要在AS编译时自动把上面性能检测工具编入方便开发自我调试,但在make编译版本不能带上上面工具(各种提示和日志影响用户体验),同时也要...原创 2019-11-27 19:57:55 · 802 阅读 · 0 评论 -
Android 手机OAT升级后应用没有更新问题解析
介绍:最近遇到OTA版本手机升级完成后有些应用没有更新问题遇到这种问题通常情况下按照以下几步:1.排除ota升级失败(通过设置查看手机最新版本)2.查看应用版本(版本是否升级到最新)3.对比桌面应用图标和设置中应用图标是否相同(如果厂商没有定制应用图标,桌面和设置里面查看到的图标是一致)遇到了两个ota升级的问题:问题一.OTA升级后发现有一个应用最新版本应该是更...原创 2019-10-23 20:01:45 · 2274 阅读 · 1 评论