自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 文章.............

databindingRxJava2 只看这一篇文章就够了recyclerview源码分析

2019-06-03 16:24:14 160

原创 Android去除折叠屏两边的黑边,默认全屏显示

1、在AndroidManifest.xml中设置resizeableActivity为true。sdk>=24resizeableActivity默认为true,小于24位false。可以设置在activity标签,影响当前activity。可以设置在application中,影响app全局。2、设置max_aspect与min_aspect。

2024-04-15 17:33:19 392

原创 CallScreeningService使用

这个权限是Android13开始有的,对鸿蒙系统没有影响,可以在代码编译阶段删除android.permission.POST_NOTIFICATIONS。2、鸿蒙系统上如果设置默认应用失败,检测一下manifest中的权限声明,目前发现需要删除。2、创建YourCallScreeningServiceImplementation。1、在小米14上需要联系人权限,否则onScreenCall()不执行。1、Manifest中声明。

2024-04-03 15:21:19 190

原创 鸿蒙(Arkts)定时器

【代码】鸿蒙(Arkts)定时器。

2024-01-30 16:49:28 551

原创 Linux目录介绍

在 Linux 系统中,目录结构是由 Filesystem Hierarchy Standard(FHS)定义和规范的。这些目录包含了系统中各种文件和资源,它们在整个系统中起着不同的作用。这些目录是 Linux 系统中常见的一部分,但不同的发行版可能会有所不同。这些目录的结构和功能旨在帮助组织和管理系统中的各种文件和资源。

2023-12-22 10:44:42 409

原创 桂林阳朔旅游攻略

桂林上水甲天下,阳朔上水甲桂林!阳朔县城看着有点破,但是阳朔的山水真是一绝,适合慢下来,骑个电瓶车来放松心情!适合游玩时间3天左右。主要景点:十里画廊、兴坪古镇、如易峰、相公山、20元人民币打卡处、遇龙河漂流、遇龙河骑行。

2023-10-31 17:05:23 256

原创 通过adb获取ANR日志

2、等待日志下载完毕,解压bugreport文件。1、命令行输入:adb bugreport。3、进入FS-->data-->anr。

2023-06-20 21:33:57 924

原创 记一次Android页面卡顿排查总结

1、通过skipped关键字判断是否有掉帧2、通过getMainLooper().setMessageLogging(new LxLogPainter());查看卡顿日志3、可以通过关键字Long monitor contention with owner查看是否有线程长时间不释放锁。

2023-05-24 15:29:04 1120 2

原创 Hilt在Android中的使用

会触发 Hilt 的代码生成操作,生成的代码包括应用的一个基类,该基类可使用依赖项注入。application 容器是应用的父级容器,这意味着其他容器可以访问它提供的依赖项。//将标有@AndroidEntryPoint和@HiltAndroidApp的父类替换为Hilt_XXX。如要告知 Hilt 如何提供同一类型的不同实现(多个绑定),您可以使用限定符。生命周期的依赖项容器,并能够将实例注入。6.4.3通过注解选中实现方式。,Hilt 可创建附着于。6.4.2对实现添加注解。6.4.1 定义注解。

2023-04-25 14:45:13 1106 1

原创 android jankstats

JankStats 库可帮助您跟踪和分析应用程序中的性能问题。Jank 是指渲染时间过长的应用程序帧,JankStats 库提供有关应用程序卡顿统计信息的报告。//调用OnFrameListenerDelegate的onFrame(开始时间,now - 开始时间,预期时间)方法。//在OnPreDrawListener中获取当前帧开始时间,当前时间,帧预期耗时。:一个布尔标志,指示帧中是否发生卡顿。:帧的持续时间(以纳秒为单位)。:帧开始的时间(以纳秒为单位)。:您的应用程序在帧中的状态。

2023-02-21 11:53:54 712

原创 apk反编译和重新打包流程

jarsigner -verbose -keystore xxx.keystore -signedjar xxx.apk 需要签名文件.apk 证书别名。格式: jarsigner -verbose -keystore 签名 -signedjar 签名文件后的文件名 需要签名文件 证书里alias别名。apktool d xx.apk,逆向之后只能看到代码的smali格式文件,需要学习smali语法才能看懂.apktool b xx,打包出来的是没有签名的apk,需要签名才能安装。

2023-02-17 16:45:03 191

原创 获取apk证书MD5值的方法

在cmd中执行 keytool -list -v -keystore xxxx.keystore -storepass 签名文件密码。cmd中执行keytool -printcert -jarfile xxx.apk。对xxxx.keystore文件获取MD5,签名信息。

2023-02-17 16:00:00 597

原创 Android 属性动画

【代码】Android 属性动画。

2022-09-07 11:46:21 195

原创 Android ⽂字的测量

【代码】Android ⽂字的测量。

2022-09-06 11:01:33 618

原创 android使用Xfermode绘制圆形头像

android Xfermode

2022-09-06 10:12:51 688

原创 Android lintoption配置

Gradle lint

2022-07-20 10:31:15 344

原创 使用Android studio开发aidl时遇到的几个问题

aidl file couldnt find import for class

2022-06-29 17:34:31 1081

原创 Android 适配ipv6

Android 适配ipv6

2022-06-02 15:20:28 2191

原创 MacBook 安装7zip

#搜索7zbrew search 7z#安装brew install p7zip7z x filename.7z 解压文件 包含目录 解压到目录中7z e filename.7z 解压文件 不包含目录 直接到当前目录

2022-05-24 11:52:53 4028

原创 Mac上android ijkplayer本地编译加调试

1.本地编译设置环境变量,ndk要用版本r10eANDROID_SDKANDROID_NDK系统偏好设置->安全性与隐私->通用->允许从一下位置下载的app设置为任何来源设置方法:打开了 Terminal 终端后 ,在命令提示后输入sudo spctl --master-disable之后按照官方提示操作就行2.本地调试ijkplayer-armv7a工程关联Android.mk编译脚本修改文件:ijkplayer/ijkplayer-a...

2022-01-05 15:36:09 1984

原创 select、poll、epoll的区别

select,poll是基于轮询实现的,将fd_set从用户空间复制到内核空间,然后让内核空间以poll机制来进行轮询,一旦有其中一个fd对应的设备活跃了,那么就把整个fd_set返回给客户端(复制到用户空间),再由客户端来轮询每个fd的,找出发生了IO事件的fd epoll是基于事件驱动实现的,加入一个新的fd,会调用epoll_ctr函数为该fd注册一个回调函数,然后将该fd结点注册到内核中的epoll红黑树中,当IO事件发生时,就会调用回调函数,将该fd结点放到就绪链表中,epoll_wait函..

2021-12-15 14:23:00 493

原创 Android framework 应用进程启动binder机制

回顾系统启动简单流程1、init进程解析init.zygote.rc 启动zygote进程,zygote对应的可执行文件app_main.cpp2、app_main.cpp 中会调用 runtime.start("com.android.internal.os.ZygoteInit", args, zygote);runtime的实现类,AndroidRuntime3 、AndroidRuntime的start中会启动虚拟机、注册jni方法、反射调用ZygoteInit的main方法预加载..

2021-12-01 16:21:44 268

原创 Android 判断设备类型(手表,车,电视,手机)

UiModeManager uiModeManager = (UiModeManager) context.getSystemService(UI_MODE_SERVICE);if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { Logger.d(TAG, "Running on a TV Device");} else { .

2021-11-23 10:58:05 4160

原创 Java语言高级特性——注解

声明一个注解类型public @interface Lance{}@Target 指定作用域注解标记另一个注解,以限制可以应用注解的 Java 元素类型ElementType.ANNOTATION_TYPE 可以应用于注解类型。ElementType.CONSTRUCTOR 可以应用于构造函数。ElementType.FIELD 可以应用于字段或属性。ElementType.LOCAL_VARIABLE 可以应用于局部变量。ElementType.METHOD 可以应用于方法级注

2021-11-23 10:10:55 2124

原创 关于Java变量名前缀m、s等的解释

google的介绍 Non-public, non-static field names start with m. Static field names start with s. Other fields start with a lower case letter. Public static final fields (constants) are ALL_CAPS_WITH_UNDERSCORES.

2021-11-18 10:17:54 1961

原创 SQLite优化

1、索引简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。优点:大大加快了数据库检索的速度缺点:索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响。索引分类直接创建索引:使用sql语句创建,Android中可以在SQLiteOpenHelper的onCreate或是onUpgrade中直接excuSql创建语句create index id_index on

2021-10-28 14:35:11 2388

原创 android NDK Crash

Linux信号机制信号机制是Linux进程间通信的一种重要方式,Linux信号一方面用于正常的进程间通信和同步,另一方面它还负责监控系统异常及中断。当应用程序运行异常时,Linux内核将产生错误信号并通知当前进程。常见崩溃信号列表:信号 描述 SIGSEGV 内存引用无效 SIGBUS 访问内存对象的未定义部分 SIGFPE 算术运算错误,除以零 SIGILL 非法指令,如执行垃圾或特权指令 SIGSYS 糟糕的系统调用 SIG..

2021-10-25 10:46:11 1441

原创 APK瘦身方案

官网方案缩减资源数量和大小1、图片优化1.1使用矢量图矢量图可以创建与分辨率无关的图标和其他可伸缩媒体。使用这些图形可以极大地减少 APK 占用的空间。 矢量图片在 Android 中以 VectorDrawable 对象的形式表示。借助 VectorDrawable 对象,100 字节的文件可以生成与屏幕大小相同的清晰图片。不过,系统渲染每个 VectorDrawable 对象需要花费大量时间,而较大的图片则需要更长的时间才能显示在屏幕上。因此,建议仅在显示小图片时使用这些矢量图..

2021-10-22 18:03:59 123

原创 Android冷启动耗时统计

系统日志统计在 Android 4.4(API 级别 19)及更高版本中,logcat 包含一个输出行,其中包含名为 Displayed 的值。此值代表从启动进程到在屏幕上完成对应 Activity 的绘制所用的时间ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms 如果我们使用异步懒加载的方式来提升程序画面的显示速度,这通常会导致的一个问题是,程序画面已经显示,同时 Displayed 日志已..

2021-10-20 11:17:07 1056

原创 Android ANR

1、触发条件出现ANR的一般有以下几种类型:1:KeyDispatchTimeout(常见)input事件在`5S`内没有处理完成发生了ANR。logcat日志关键字:`Input event dispatching timed out`2:BroadcastTimeout前台Broadcast:onReceiver在`10S`内没有处理完成发生ANR。后台Broadcast:onReceiver在`60s`内没有处理完成发生ANR。logcat日志关键字:`Timeou

2021-10-19 17:06:44 623

原创 SOCKS5代理简述

SOCKS作用在会话层上,因此它是一个提供会话层到会话层间安全服务的方案,不受高层应用程序变更的影响。Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求),所以Socks代理服务器比应用层代理服务器要快...

2021-10-13 17:14:40 821

原创 Android换肤实现原理

流程分析1.创建skip.apk,里面只有要修改的资源文件,没有代码2.将skip.apk放在data/data目录下3.通过原apk中的资源id获取到资源的name和type,然后通过mSkinResources.getIdentifier获取到皮肤包中的资源(mSkinResources是skip.apk资源包中获取的Resources,下面会讲怎么获取skip.apk中的资源)/** * 1.通过原始app中的resId(R.color.XX)获取到自己的 名字 *

2021-09-16 20:27:57 143

原创 ServiceManager addService流程

1.zygote启动zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是 app_main.cpp ,进程名为zygote// system/core/rootdir/init.zygote32.rcservice zygote /system/bin/app_process -Xzygote /system/bin --zygote --startsystem-serverclas...

2021-08-24 18:01:28 2787

原创 binder注册与启动

binder的jni方法注册1.zygote启动1-1.启动zygote进程zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是 app_main.cpp ,进程名为zygote// system/core/rootdir/init.zygote32.rcservice zygote /system/bin/app_process -Xzygote /system/bin --zygot

2021-08-23 17:30:19 396

原创 Android ServiceManager

1.启动servicemanager进程ServiceManager是由init进程通过解析init.rc文件而创建的,其所对应的可执行程序servicemanager,所对应的源文件是service_manager.c,进程名为servicemanager。system/core/rootdir/init.rc// 602service servicemanager /system/bin/servicemanagerclass coreuser systemgroup...

2021-08-23 15:08:10 1802

原创 Android Studio中mipmap目录和drawable目录有什么区别

HUAWEI TECHNOLOGIES CO.,LTD.华为 MATEX 显示适配指导华为 MATEX 显示适配指导 V1.0 机密2019-3-19 第 2 页, 共 13 页目录1 背景和范围...............................................................................................................................32 适用范围..................

2021-08-05 18:44:45 346

原创 判断应用是否在电池优化列表

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Logger.i(TAG,"isIgnoringBatteryOptimizations = " + pm.isIgnoringBatteryOptimizations(getPackage..

2021-07-30 14:18:43 331

原创 Android应用退到后台,点击悬浮窗返回应用

方案1: 系统设置中找到对应的应用,打开权限“后台弹出界面”,然后直接调用startActivity()方法 缺点:1、需要开启权限 2、部分手机没这个权限方案2: 判断app是否在前台,如果不在前台调用moveTaskToFront()方法上代码:判断是否在前台的方法 private boolean isAppRunningForeground(Context context) { ActivityM...

2021-07-21 15:36:32 4224

原创 软件设计原则

开闭原则:对扩展开放,对修改关闭,不修改原有的接口,可新增接口里氏替换原则:任何基类可以出现的地方,子类一定可以出现依赖倒置原则:依赖接口,不依赖实现

2021-07-05 19:57:26 33

原创 修改ijkplayer切换视频源后,有声音画面卡住的问题l

原因,使用ijkplayer

2021-06-17 15:44:31 810

tablayout简单实用

tablayout简单实用

2017-08-02

空空如也

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

TA关注的人

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