自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhuxingchong的博客

android,通信,telecomm

  • 博客(131)
  • 资源 (4)
  • 收藏
  • 关注

原创 通用Adapter适配器

一、简介二、虚拟机内存模型三、内存回收GC内存回收算法四、内存调优

2021-09-03 10:42:21 362

原创 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 1408

原创 ThreadLocal原理—使用

一、介绍 ThreadLocal是指线程局部变量,多个线程并发运行的时候,使用ThreadLocal装饰的变量在每个线程里都是单独使用的,Thread线程本身就是一个类,ThreadLocal是Thread里面的一个局部变量。所以ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的和普通的类一样的。由于每个线程拥有了自己的变量,所以消除了多线程情况下的竞争关系。原理ThreadLocal这个类主要做用为key泛型ThreadLocal<T>,都是作为ThreadLo..

2021-06-18 16:09:01 320 1

原创 Android应用启动流程一次看透

应用启动流程1.1、冷启动和热启动冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动。 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动对应的进程组件,这个方式叫热启动。...

2021-06-15 19:35:25 2535 1

原创 Android 应用多角度启动优化

一、简介1.1、冷启动和热启动冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动对应的进程组件,这个方式叫热启动1.2、启动速度测量1.2.1、TraceCompatTraceCo...

2021-06-03 19:31:10 1255 6

原创 Android Studio 版本号联动统一控制方法

一.根目录下定义config.gradleext { androidConfig = [ compileSdkVersion = 30, buildToolsVersion = "23.0.2", minSdkVersion = 26, targetSdkVersion = 30, //项目版本3 versionX = 3,

2021-05-21 11:07:02 237

原创 差异化集成性能优化工具

差异化工具集成目录差异化工具集成介绍:一、差异化编译1.FlavorDimensions 的意义2.ProductFlavors 组合二、差异化配置1.Version维度配置版本相关信息4.Debug和Release版本调试工具配置三、常用三方库查询下载四、内存泄漏工具集成(1)LeakCanary内存泄漏工具接入使用(3)内存泄漏的判定机制(4)内存泄漏的轨迹生成机制五、Koom工具集成(1)Koom工具接入使用(2)Koom使用场.

2021-04-07 20:33:36 474

原创 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 476

原创 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 1119

原创 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 288

原创 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 836

原创 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 1091

原创 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 2714 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 4747

原创 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 826

原创 android MAT内存分析工具使用

1.直接下载mat工具包MAT工具下载地址:https://www.eclipse.org/mat/2.转换hprof格式可以在mat工具中打开cmd打开命令行,cd到\ android-sdk-windows\tools所在目录,并输入命令hprof-conv xxxxx.hprof yyyyy.hprof,其中xxxxx.hprof为原始文件,yyyyy.hprof为转换过后的文件,.hprof文件处理完毕,可以用来分析内存泄露情况了。3.启动mat解压mat工具后启动MemoryA

2020-10-19 19:34:08 386

原创 Android 解决输入法弹出导致布局上移,背景压缩,闪烁

介绍:通常情况下应用在调出输入法时应用布局会改变布局大小或配置布局适配输入法高度,如果应用有设置背景则会因为高度改变导致背景被压缩出现闪烁显示。下面这张图是我的布局全屏显示,主题是透明,设置一个遮罩层给背景,因为输入法弹出导致布局高度改变遮罩层背景也会改变高度,这个过程可以看到底部壁纸背景,如果我们强制设置布局大小为全屏就会引起输入法遮挡布局问题。解决方案:输入法弹出后我们的布局高度会被改变,所以会有一个过程可以看到背景闪一下。虽然布局大小改变了,但底部DecorView高度是不会改

2020-09-10 18:12:09 1715

原创 RecyclerView 导致内存溢出卡顿问题

该问题原因时RecyclerView不停调用onCreateViewHolder导致一次性创建大量ViewHolder导致内存溢出,有试过分页加载数据,这种如果快速滑动也会卡顿而且数据加载多了也会内存溢出。这里有一篇文章讲解这种现象的原因:https://www.jianshu.com/p/d115cfaafbd4总结:问题根本原因是ViewHolder没有复用,之所以没复用是因为LayoutManager计算高度有问题导致判断条件错误,我的遇到的问题也是布局导致的如下所示。<.

2020-09-03 10:07:49 1267

原创 android adb查看手机内存使用情况

1.查看设备节点内存adb shell df2.查看磁盘内存和运行内存:adb shell free3.查看内存详细数据adb shell cat /proc/meminfo

2020-08-05 17:25:51 16267

原创 android 分别修改bitmap四个角圆角大小

int radious = 32;Paint paint = new Paint(); // lefttop,lefttop,righttop,righttop,leftbottom,leftbottom,rightbottom,rightbottomfloat[] radiusArray = { radious, radious, radious, radious, radious, radious, radious, radious };private..

2020-08-05 15:58:24 543

原创 解决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 2630

原创 动态高斯模糊适配不同尺寸

介绍不同UI大小尺寸不同需要在特定区域进行高斯模糊适配,例如system ui下拉高度不同背景高斯模糊不同,或弹框背景区域做高斯模糊处理。原理1.截取当前屏幕图片(使用截图接口)2.根据当前UI计算位置,大小3.在截图bitmap上截取图片4.高斯模糊处理截取后的图片5.将图片设置为背景具体实现1.截取当前屏幕图片(使用截图接口) public static String screenShotByShell(Context context){ ..

2020-05-20 20:08:44 514

原创 java 线程池详解

一.介绍:java 里面线程池的顶级接口是 Executor,但是严格意义上讲 Executor 并不是一个线程池,而 只是一个执行线程的工具。真正的线程池接口是ExecutorService。 线程池:虽然线程的创建销毁的开销相对较小,但是频繁得创建和销毁也会消耗有限的资源,从而带来性能上的浪费,也不够高效。因此线程池的出,现就是为了解决这一问题,即在初始状态创建并维护一定数量的空闲线程...

2020-04-30 09:39:50 262

原创 Java Thread线程详解

一、介绍线程:线程是CPU调度的基本单位,也就是说在一个进程中可以有多个并发程序执行流,线程拓展了进程的概念,使得任务的执行得到更加的细分。线程是进程的执行单元,但是线程不是分配系统资源的单位,它们共享所在进程的资源,包括共享内存,公有数据,全局变量,进程文件描述符,进程处理器,进程代码段,进程用户ID等等。 线程独立拥有自己的线程ID,堆栈,程序计数器,局部变量,寄存器组值,优先级,...

2020-04-28 19:51:09 347

原创 Android.mk 源码编译无法内置成系统共享android.uid.system应用

介绍:配置系统共享android.uid.system应用分为两步:1.AndroidManifest.xml文件中配置:android:sharedUserId="android.uid.system" <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="...

2020-04-08 15:40:12 672

原创 Android AndroidX的迁移

AndroidX 将原始支持库 API 替换为androidx命名空间中的软件包。只有软件包和 Maven 工件名称发生了变化;类、方法和字段名称没有变化。注意:我们建议在单独的分支中执行迁移。此外,还应设法避免在执行迁移时重构代码。前提条件执行迁移之前,请先将应用更新到最新版本。我们建议您将项目更新为使用支持库的最终版本:版本 28.0.0。这是因为,1.0.0 版本的 Andr...

2020-03-26 13:46:13 882

原创 android 轻松获取jar或aar包

一个android项目引入第三方包时通过配置implementation'com.github.bumptech.glide:glide:3.7.0'就可以直接使用,如果包有更新也可以修改版本号同步下来用起来很方便,但有些情况我们确实需要下载jar或aar包放到本地lib库中编译,正常情况下我们会去网上找有没有人打包过分享了,或者下载源码自己打包,这个都不是最好的方法。下面我就分享下更好的方法下载...

2020-03-26 10:40:05 1017

原创 Android 内置第三方应用为系统应用默认赋予权限

一、内置应用分为以下几种:1.第三方合作可卸载应用2.第三方应用不可卸载应用3.第三方应用不可卸载并且不用动态申请危险权限应用通常厂商内置应用会放到vendor目录下再创建自己的目录名,把需要预置的apk放入对应目录,并编写对应的mk文件。应用是否可用卸载会根据类型最后拷贝到不同的目录下,例如system/app(不可卸载),system/third-app(可卸载),...

2020-03-13 09:18:15 6008

原创 Android AspectJ 常用埋点,拦截,监听注解使用

做一个学习记录:Android中的AOP编程 Android之AOPAndroid Studio 中自定义 Gradle 插件看AspectJ在Android中的强势插入jarryleo / MagicBuriedPointAspectJ 的两种用法(1)用自定义注解修饰切入点,精确控制切入点,属于侵入式;(2)不需要在切入点代码中做任何修改,属于非侵入式。侵入式侵入式用法...

2020-03-09 17:59:09 2048

原创 Android q Launcher最近任务栏移植

一、介绍因为从android p开始google就把最近任务栏功能移植到了Launcher应用模块中,所以Launcher应用升级到android q时最大的移植任务还是最近任务栏功能,最近任务栏和系统应用system ui有事件交互,例如导航栏相关的滑动相关事情都要传递到最近任务栏作为触发最近任务栏的事件。本次移植是从android p移植到android q版本,androd p版本...

2019-12-28 16:18:43 3201 1

原创 Android 性能优化多渠道差异化编译方法

一、介绍:最近做app性能优化增加了几个第三方性能检测框架:1、leakcanary(内存泄漏检测)2、blockcanary(耗时检测工具)因为项目开发时在android studio工具编译但在完整编译时是用make方式和整个项目一起编译,所以需要在AS编译时自动把上面性能检测工具编入方便开发自我调试,但在make编译版本不能带上上面工具(各种提示和日志影响用户体验),同时也要...

2019-11-27 19:57:55 757

原创 Android 手机OAT升级后应用没有更新问题解析

介绍:最近遇到OTA版本手机升级完成后有些应用没有更新问题遇到这种问题通常情况下按照以下几步:1.排除ota升级失败(通过设置查看手机最新版本)2.查看应用版本(版本是否升级到最新)3.对比桌面应用图标和设置中应用图标是否相同(如果厂商没有定制应用图标,桌面和设置里面查看到的图标是一致)遇到了两个ota升级的问题:问题一.OTA升级后发现有一个应用最新版本应该是更...

2019-10-23 20:01:45 1882 1

原创 Android 简单代码实现图片极致压缩不在oom

最近遇到一个前人留下坑,如下报错。java.lang.RuntimeException: Canvas: trying to draw too large(268435456bytes) bitmap.09-20 17:06:39.298 26126 26126 E AndroidRuntime: at android.view.DisplayListCanvas.thro...

2019-09-21 11:23:03 421

原创 Android 锁屏时重启动手机如何快速启动Launcher

Launcher概述Android系统启动的最后一步是启动一个Home应用程序,这个应用程序用来显示系统中已经安装的应用程序,这个Home应用程序就叫做Launcher。应用程序Launcher在启动过程中会PackageManagerService返回系统中已经安装的应用程序的信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快捷图标来启动相应的应用程序。...

2019-09-17 09:58:16 1927

原创 Android 获取所有被禁用或冷冻的应用信息

手机通常冷冻应用就是使用禁用接口所以直接判断应用是否被禁用即可/** * 获取手机应用程序 * @return */ private List<LauncherActivityInfo> getAllApps() { //获取用户列表 List<UserHandle> userHandles = U...

2019-09-05 20:38:45 2435 1

原创 AnimatorSet组合按照时间间隔同步播放动画

需求:1.布局按照上下位置层间隔固定时间播放透明度改变动画2.播放透明度时播放缩放动画4.缩放动画执行完成时所有透明度都变为不透明1效果如下:实现原理分析:1.先有将布局按照由上到下层次布局2.对每一层都添加一个透明度渐变动画3.按照由上到下层次增加播放延迟时间4.给整个布局添加一个缩放动画,动画时长为从第一个透明度变化试图开始到最后一个结束代码实现:...

2019-08-28 20:29:39 3041

原创 Android 动画流畅改变View背景圆角角度

需求:如下文件夹需要动态改变背景圆角角度达到前后融合效果。方法介绍:通常情况下我们给View设置圆角背景只要在xml里面配置shapedrawable背景即可例如:布局文件 <View android:id="@+id/folder_page_view_bg" android:layout_width="@dimen/folder_paged...

2019-08-28 09:04:40 1661

原创 Android 文件夹放大缩小仿IOS融合动画效果

效果如下,打开文件夹时从小到大与最终位置大小吻合,关闭文件夹时缩小到图标原有位置做到无缝融合效果。过程分析(一)文件展开后的布局如上图文件夹打开后布局层次1.最下面时背景层(背景不移动但有透明度变化)2.文件夹编辑控件,文件夹指示器,添加应用程序控件作为倒数第二层(该层有位移,透明度,大小缩放动画)3.文件夹内容层也带有圆角半透明白色作为背景(该层有位移,大小...

2019-08-17 16:51:18 1338

原创 Android 无缝切换不同网络请求框架

最近在学习网易公开课,里面有很多大牛分享,这次代码基本是把学习视频代码重敲了一边,同时为了加强对kotlin语言使用,后期写代码都将切到kotlin语言。最好的语言是用图来描述,所以我还是通过画图和代码来讲解一下原理。架构介绍:1.这个架构还是很简单的,如上图有一个公共接口IHttpProcess,里面只有一个post网络请求方法,该接口在HttpHelper,VolleyProc...

2019-07-01 11:24:17 1494 2

原创 EventBus Kotlin实现源码解析

介绍:使用第三方框架可以加快项目开发进度,为了加强对EventBus框架原理的理解同时更好掌握kotlin语言,这次我使用kotlin实现eventbus基本功能:注册,取消注册,消息传递,主线程,子线程事件传递。为了更好理解通过下面几个流程图来说明:EventBus注册流程//注解注册fun register(item: Object){ //判断改对象是...

2019-06-24 14:50:02 338

shenzhen.db

每个城市一个独立数据库,可以根据城市直接切换到不同城市数据库使用。 每个数据库有四张表, 功能: 1.查询线路信息 2.查询一条线路所有站台信息 3.任意两天线路换乘最短换乘结果 4.全国城市编号 详细介绍:https://blog.csdn.net/zhuxingchong/article/details/88763558

2020-03-09

android q 最近任务栏依赖包sysui_shared.jar

android q 最近任务栏依赖包sysui_shared.jar可以直接替换掉android p quickstep\libs下包,因为很多接口有所改变需要对androd q最近任务栏接口做适配,可以查看我的博客了解android q最近任务栏移植分享。

2019-12-28

android 手机做扩音器功能

通过手机或耳机麦克风将声音录下来再通过手机喇叭或手机连接其他的音箱将录到音频流实时播放出来,最终达到扩音功能,因为录音收到手机播放声音干扰,最好将手机连接蓝牙音箱作为扩音器效果更佳。

2018-07-06

cocos2d-android 工程

cocos2d android游戏开发工程代码和各种样例代码。

2014-12-18

空空如也

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

TA关注的人

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