自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 Android ——事件分发机制

用户在使用app时,会经常频繁的触摸屏幕,点击页面交互,打开需要的功能。用户触摸点击的动作,就涉及到app中相关UI的触摸和点击事件。事件在UI中传递和处理的过程,就是事件分发流程。发生一次点击事件时,事件会按照Activity->ViewGroup->View的顺序,进行事件传递。

2024-12-18 20:51:34 1595

原创 View和ViewGroup,View绘制流程解析

View是绘制在屏幕上的用户能与之交互的一个对象,它代表了用户界面组件的一块可绘制的空间块,每一个空间块在屏幕上占据一个长方 形区域。View 的绘制流程是从 ViewRootImpl 的 performTraversals() 方法开始的,它经过测量(measure)、放置(layout)和绘制(draw)三个过程才能把一个 View 绘制出来,measure() 方法用于测量 View 的宽高,layout() 用于确定 View 在父容器中的放置位置,draw() 负责做具体的绘制操作。

2024-12-18 11:48:18 1185

原创 Android四大组件——ContentProvider(四)

这是在 Android 11 下才会出现的问题,简单来说,就是出于安全考虑,Android 11 要求应用事先说明需要访问的其他软件包。在 My Application2 中的 AndroidManifest.xml 中增加。

2024-12-11 15:20:44 162

原创 Androdi四大组件——BroadCast(三)

广播接收器用于响应来自其他应用程序或者系统的广播消息。

2024-12-11 15:18:13 297

原创 Android 事件分发机制详解/ 及Activity启动流程浅谈

目前网上的事件分发机制文章很多,可能大家看了很多,还是很懵逼,这篇文章是我自己总结的事件分发机制,提取了在事件分发机制中,最精华的部分,如果对事件分发还是不太清楚,可以看看这篇文章。

2024-12-09 16:38:50 1248

原创 Android四大组件——Service(二)

Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响。此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。

2024-12-09 16:26:37 904

原创 Android —— 四大组件之Activity(一)

Android四大组件即Activity(前台)Service(后台),Broadcast(通信),ContentProvider(数据存储)一、Activity。

2024-12-09 16:14:17 1098

原创 ANR分析总结

在Android中,当一个APP启动,其实是由zygote进程fork出来的一个子进程,这个进程(其中自然携带了一个0号线程)以 ActivityThread.main 为程序入口开始执行,而在main方法的最后,其实是没有机会到达exit的终点的,因为其调用了Looper.loop() 让0号线程“永远”不会到达终点(除了进程被杀掉)但既然可以使用APP,就说明我们在使用APP的过程中,代码没有执行到exit,这个就是下面要说到主线程的Handler机制了。则新的事件无法走到正常分发的逻辑。

2024-09-05 17:59:50 1513

原创 String.format各种使用方法

最小宽度] ,用于设置格式化后的字符串最小长度,若使用 [最小宽度] 而无设置 [标识] ,那么当字符串长度小于最小宽度时,则以左边补空格的方式凑够最小宽度。b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。f,浮点数型(十进制)。

2024-08-29 11:40:43 2137

原创 【无标题】

MTK问题场景及所需Log抓取MobileLog、ModemLog、NetworkLog、ConnsysLog而在开启MTK Log之前,测试设备必须开启USB Debug。开启USB Debug。

2024-07-11 16:06:13 758

原创 APK反编译

使用方式举例,当发现使用jadx打不开某个APK或者DEX文件时,可以尝试将APK的DEX文件提出来,提取方式不详述,可自行百度。下载地址:https://github.com/DexPatcher/DexPatcher-tool/releases。官方地址:https://github.com/iBotPeaches/Apktool/tree/gh-pages。官方地址:https://github.com/DexPatcher/dexpatcher-tool。使用示例:d2j-dex2jar xxx。

2024-07-11 15:04:57 252

原创 焦点问题 anr

/ActivityThread会在onResume后将activity的window添加到wms中,保证当前页面的window。//将弹出dialog的操作放到MessageQueue后面延迟一会,保证activity的onResume优先执行完成。// 具备focus焦点,防止频繁的ANR异常。

2024-03-28 17:42:04 198

原创 音频焦点问题踩坑 Android9

如果只希望在短时间内播放音频,并且希望前一个持有音频焦点的应用暂停播放,则应该请求暂时性的焦点 (AUDIOFOCUS_GAIN_TRANSIENT)。如果只希望在短时间内播放音频,并且希望前一个持有音频焦点的应用暂停播放,则应该请求暂时性的焦点 (AUDIOFOCUS_GAIN_TRANSIENT)。如果计划在将来一段时间内播放音频,并且希望前一个持有音频焦点的应用停止播放,则应该请求永久性的音频焦点 (AUDIOFOCUS_GAIN)。Android 9以上 这里永久失去了焦点 无法正常恢复。

2024-03-27 12:04:13 339

原创 NE问题分析教程

https://blog.51cto.com/u_14291117/2635609

2024-03-25 16:03:45 424

原创 【大屏 折叠屏适配】 折叠后,activity左右黑边问题

分屏模式 /之所以从 Android 7.0 开始,把 resizeableActivity 默认改为 true,是因为在 7.0 里增加了一个新功能,叫分屏模式。如果把 resizeableActivity 设为 false,就意味着应用是不支持分屏模式的,它决定了应用是否有分屏的设置项。

2024-03-25 16:02:53 1787

原创 talkback适配:焦点顺序切换问题

如:这里id从1到6,则会以这6个id 对应的虚拟视图,从小到大进行焦点切换。这里将上述的id数组,与对应虚拟视图做了绑定。

2024-03-08 17:57:23 525

原创 adb shell pm path 包名获取安装包路径

adb shell pm path 包名。

2024-01-04 21:03:19 1073

原创 adb命令,获取当前页面的包名和类名。 adb shell dumpsys window | findStr mCurrentFocus

adb shell dumpsys window | findStr mCurrentFocus

2023-12-26 19:42:40 1761

原创 adb root相关命令

请注意,这些操作可能会使设备的保修无效,并可能导致设备变砖或丧失数据。在进行操作之前,请确保您充分了解每个步骤的含义,并已经对您的设备进行了备份。执行此命令后,屏幕上会出现提示,需要您使用音量键选中“是”,然后按电源键确认,以解锁bootloader。这个命令会重启您的Android设备,进入bootloader模式。请记住,在执行这些操作之前,您应该了解它们的风险,并确保您有权限对设备进行这些更改。如果对这些步骤不够熟悉,可能会导致设备损坏。默认情况下,系统分区是只读的,以防止对关键系统文件的意外修改。

2023-12-26 17:01:37 2349

原创 Android12 新增SplashScreen,相关适配问题

如果您的现有启动画面是使用替换 android:windowBackground 的自定义主题实现的,那么在 Android 12 及更高版本上,系统会将自定义启动画面替换为默认的 Android 系统启动画面(这可能不是应用的预期体验)。如果您的现有启动画面是使用专用 Activity 实现的,那么在搭载 Android 12 或更高版本的设备上启动您的应用会导致系统重复显示启动画面,也就是先显示新的系统启动画面,接着显示您现有的启动画面 activity。

2023-12-13 17:46:07 4449 2

原创 Android布局优化之include、ViewStub、merge

在写Android的xml布局时,用好 include、ViewStub、merge这三个标签,可以是我们的xml更加简洁、高效。

2023-12-04 20:14:28 1011

原创 ANR 日志分析

再看display,看是否熄屏。通过pid查询log。

2023-11-24 10:37:24 454 1

原创 Kotlin:内置函数let、also、with、run、apply的使用

作用:调用同一个对象的多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可。调用同一个对象的多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可。let函数:返回值 = 最后一行 / return的表达式。且有返回值 :函数块的最后一行 / return表达式。{ } 返回值为 最后一行 or return语句。also函数:返回值 = 传入的对象的本身。run函数返回最后一行的值 / 表达式。apply函数返回传入的对象的本身。{ } 返回值为 自身。

2023-11-23 15:33:25 390

原创 This Activity already has an action bar supplied by the window decor

mainfest中activity没有设置theme,默认是有actionbar的。设置activity为noactionbar。

2023-11-20 15:18:16 131 1

原创 一个Activity内多个Fragment间切换的生命周期问题

且在下一级个Fragment处按HOME返回(或其他能触发onSaveInstanceState的操作),会触发onDestroyView的Fragmende的onSaveInstanceState。而ViewBinding在onDestroyView时会将binding置为null,因此此时在onSaveInstanceState中访问binding会报错。调用了上一个Fragment的onDestroyView。

2023-11-20 14:15:52 176 1

原创 adb获取手机当前有哪些在运行的任务栈

可以关注 ActivityRecord{2290792d u0 com.hjr.heidoulib/.module.activity.TestComponentNameActivity t9}来获取当前应用所显示的界面的包名跟类名。在Android studio中的Terminal中输入 adb shell dumpsys activity activities。就会出现你想要的信息。

2023-11-16 11:12:55 251 1

原创 Android获取Build.ID

Build.ID是Android系统中的一个属性,用于标识设备的唯一标识符。它是一个字符串,通常由厂商在制造设备时设定,并且在设备的整个生命周期中保持不变。每个设备都有一个唯一的Build.ID,因此我们可以根据它来区分不同的设备。在Android开发中,经常需要获取设备的一些信息,比如设备型号、Android系统版本等。而Build.ID就是其中一个重要的属性,它代表了设备的唯一标识符,对于判断设备类型和版本非常有用。

2023-11-15 16:53:22 1275

原创 从被混淆的log里通过mapping还原log文件

因此 还原为EditEventViewBinding类型的,FragmentEditEventBinding类的editEventView这个属性。例如:String test 属性,String被混淆为 String -> a,test被混淆为 test -> o。报空指针错误,从空的引用中读属性值:q6.b q6.c.a。分析: q6.b类型的 q6.c.a这个属性。前面是类型,后面是属性名。

2023-11-13 21:16:35 155

原创 Kotlin中非局部返回,从lambda表达式返回的问题

越来越多的会使用到一个activity嵌套多个fragment的场景,典型的例子就是app的首页,一般都会由一个activity+多个子tab组成,那对于Fragment的显示、隐藏等我们通常都是通过FragmentManager进行管理,但这种方式很容易造成代码臃肿,难以维护。而通过Jetpack的导航组件——Navigation,就可以很方便的管理各fragment之间的切换,让开发变得更简单。

2023-11-13 21:03:03 168

原创 Android 多用户时的userId获取方法

Android的多用户可以做到不同用户的应用的物理文件级(数据)的区分,以实现不同用户有不同的壁纸、密码,以及不同的应用等。Linux是多用户系统,每个用户都拥有一个uid,这个uid由系统和用户名做映射绑定。同时,为了便于用户管理(譬如管理文档权限),Linux引入了群组的概念,可以将多个用户归于一个群组。例如:在一个有两个用户(用户id分别为0和10)的安卓设备上,在用户10下安装一个应用,此时,在0下是看不到这个应用的。root用户:Linux下的唯一的超级用户,拥有所有的系统权限。

2023-11-10 18:12:33 1418 1

原创 WebView底部白色线条问题

解决方案:horizentalScrollBar设置为false。设置了底部水平的滚动条,取消掉。

2023-11-02 11:54:10 207 1

原创 Android AlarmManager 闹钟服务

AlarmManager 则具有唤醒 CPU 的功能,可以保证每次需要执行特定任务时 CPU 都能正常工作, 或者说当 CPU 处于休眠时注册的闹钟会被保留(可以唤醒 CPU),但如果设备被关闭,或者重新 启动的话,闹钟将被清除。从 API 19 开始,Alarm 的机制都是非准确传递的,操作系统将会转换闹钟,来最小化唤醒和电池的使用,但某些新的 API 会支持严格准确的传递,比如。AlarmManager 主要是用来在某个时刻运行某些的代码的,即使 APP 在那个特定时间并没有运行。

2023-11-01 16:17:55 204 1

原创 ValueAnimator 最基本的轮子

ValueAnimator 并不常用,因为它的功能太基础了。ObjectAnimator 是自动调用目标对象的 setter 方法来更新目标属性的值,以及很多的时候还会以此来改变目标对象的 UI,而 ValueAnimator 只是通过渐变的方式来改变一个独立的数据,这个数据不是属于某个对象的,至于在数据更新后要做什么事,全都由你来定,你可以依然是去调用某个对象的 setter 方法(别这么为难自己),也可以做其他的事,不管要做什么,都是要你自己来写的,ValueAnimator 不会帮你做。

2023-09-08 15:00:13 82 1

原创 ImageView.setBackGroundDrawable时会把padding清空

ImageView.setBackGroundDrawable时会把padding清空。

2023-09-07 14:55:35 75 1

原创 安卓8.0以上版本 限制从后台启动服务

如果要在后台进行作业,建议改为使用workmanager。

2023-08-04 16:45:01 121 3

原创 DateUtil的Api存档

记录

2023-03-08 15:57:30 118 2

原创 腾讯微信秒剪 实习生一面

这里写自定义目录标题腾讯微信秒剪 实习生一面腾讯微信秒剪 实习生一面1.自我介绍2.简单说下当前的项目 负责什么3.项目为什么要用Retrofit和rxjava Retrofit和rxjava的优点缺点4.Java的可见性,原子性,synchronized,怎么保证可见性 原子性 volatile怎么保证的可见性5.java的静态内部类和非静态内部类内存分配是怎样的??(反正是内存什么的好像) 静态方法跟非静态方法 死锁和同步 死锁产生的原因 静态方法中synchronized和非静态

2021-03-25 21:59:43 455

转载 解决recylerview和下拉刷新的冲突

学习笔记思路:监听RecyclerView的滑动,当滑动到顶部的时候,再设置SwipeRefreshLayout刷新可用。mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {

2020-05-18 20:45:09 314

Android四大组件及动画技术详解与应用

内容概要:本文详细介绍了Android四大组件(Activity、Service、Broadcast Receiver、Content Provider)的基本概念、生命周期、启动方式及应用场景,并深入讲解了Android中的动画技术,包括帧动画、补间动画和属性动画的具体实现方法及示例。 适合人群:Android初学者,对Android开发有一定了解的技术人员。 使用场景及目标:①理解和掌握Android四大多组件的作用和生命周期管理;②掌握不同类型动画的设计与实现技巧;③提高Android应用程序的用户体验。 阅读建议:本文涉及内容较多,建议边阅读边实践,特别是对于四大组件的启动方式和动画效果的应用,可以通过编写小项目加深理解。

2024-12-09

Java内存管理与优化技术详解及应用

内容概要:本文全面解析了Java应用程序中的内存管理与优化方法。首先介绍了内存泄漏、内存抖动的基础概念,然后讲解了垃圾回收(GC)的基本原理及其工作流程。文章列举了多种常见的内存泄漏场景及其产生的原因,如非静态内部类、Handler引用外部类、监听器未能正确注销等。同时介绍了内存抖动的表现形式、常见原因以及解决方案。最后分享了一些内存优化策略,例如利用StringBuilder进行高效字符串拼接、合理复用资源、选用适合的数据结构等。 适合人群:适用于有一定经验的Java开发人员和技术团队leader,尤其是关注应用性能提升的技术爱好者。 使用场景及目标:旨在帮助开发人员深入理解Java内存的工作方式,掌握预防和定位内存相关问题的方法,提高系统运行效率。具体应用场景包括但不限于项目架构设计阶段、线上故障排查、性能瓶颈分析等。 其他说明:文中理论与实战相结合,附带丰富的示例代码和工具介绍,便于快速掌握关键知识点。建议配合实际案例一起研读效果更佳。

2024-12-09

空空如也

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

TA关注的人

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