自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 焦点问题 anr

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

2024-03-28 17:42:04 132

原创 音频焦点问题踩坑 Android9

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

2024-03-27 12:04:13 161 1

原创 NE问题分析教程

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

2024-03-25 16:03:45 318

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

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

2024-03-25 16:02:53 421

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

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

2024-03-08 17:57:23 132

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

adb shell pm path 包名。

2024-01-04 21:03:19 588

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

adb shell dumpsys window | findStr mCurrentFocus

2023-12-26 19:42:40 790

原创 adb root相关命令

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

2023-12-26 17:01:37 632

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

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

2023-12-13 17:46:07 1237 1

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

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

2023-12-04 20:14:28 871

原创 ANR 日志分析

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

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

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

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

2023-11-23 15:33:25 53

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

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

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

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

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

2023-11-20 14:15:52 46 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 84 1

原创 Android获取Build.ID

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

2023-11-15 16:53:22 301

原创 从被混淆的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 46

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

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

2023-11-13 21:03:03 59

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

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

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

原创 WebView底部白色线条问题

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

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

原创 Android AlarmManager 闹钟服务

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

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

原创 ValueAnimator 最基本的轮子

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

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

原创 ImageView.setBackGroundDrawable时会把padding清空

ImageView.setBackGroundDrawable时会把padding清空。

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

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

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

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

原创 DateUtil的Api存档

记录

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

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

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

2021-03-25 21:59:43 393

转载 解决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 265

空空如也

空空如也

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

TA关注的人

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