自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 android.app.RemoteServiceException$CannotPostForegroundServiceNotificationException: Bad notificati

此异常通常发生在 Android 8.0(API 26)及以上系统,因前台服务的通知配置不符合系统要求所致。

2025-06-12 19:08:43 155

原创 android:foregroundServiceType详解

是用于声明前台服务类型的属性,主要从。在 Android 中,但无需指定具体类型。

2025-06-12 16:51:03 175

原创 Android 14动态注册广播注意事项

【代码】Android 14动态注册广播注意事项。

2025-06-12 16:45:41 45

原创 bindService 和 startService 生命周期对比

onCreate() → onStartCommand() → onBind() → [服务运行] → onUnbind() → [服务继续运行] → stopSelf()/stopService() → onDestroy()onCreate() → onStartCommand() → [服务运行] → stopSelf()/stopService() → onDestroy()onCreate() → onBind() → [服务运行] → onUnbind() → onDestroy()

2025-06-12 16:33:34 329

原创 在 macOS 上搭建 Flutter 开发环境

确保使用 Flutter 支持的 Xcode 版本,可以在 [Flutter 文档](https://flutter.dev/docs) 中查看版本要求。3. 指定 Flutter SDK 路径(例如:`/Users/yourusername/development/flutter`)- 访问 [Android Studio 官网](https://developer.android.com/studio)4. 在 Android Studio 的设备选择器中选择 Android 模拟器。

2025-06-10 21:52:10 465

原创 Mac下WebSocket服务端的简单实现

2025-06-04 19:57:50 109

原创 Android自定义View实现垂直虚线

UI上有一个效果,需要实现垂直的虚线。

2025-06-03 21:24:12 137

原创 使用 Version Catalogs统一配置版本 (Gradle 7.0+ 特性)

【代码】使用 Version Catalogs统一配置版本 (Gradle 7.0+ 特性)

2025-06-03 21:03:21 268

原创 Android 11以上App主动连接WIFI的完整方案

早期Android版本App内连接指定的WIFI还是比较简单的,但是随着Android版本的提升,限制也越来越多。以下是一套完整的Android 11以上的WIFI应用内主动连接方案。第三步:如果10s内未主动连接上,跳转到WIFI设置页(注意:到这个页面也会主动连接,目测基本100%成功率)但是这里有一个问题:这个是建议,不一定能连上。

2025-06-03 20:42:05 479

原创 Android主流版本市占率(适配建议)

可见:Android 10以上占比接近90%,Android 10以上可以作为适配重点。

2025-06-03 20:19:49 134

原创 Mac版本Android Studio配置LeetCode插件

第三步:使用Google Chrome浏览器登录LeetCode,苹果自带的浏览器没有做研究了,感觉比较麻烦。JCEF 是 Java 对 Chromium Embedded Framework (CEF) 的封装,允许在 Java 应用中嵌入 Chromium 浏览器引擎。第一步:Android Studio里面找到Settings,找到Plugins,在Marketplace里面搜索LeetCode Editor。第二步:安装对应插件,并在Tools->LeetCode Plugin页面输入帐号和密码。

2025-06-03 20:05:09 664

原创 本地Android项目push到远程Git服务器失败问题处理

settings->version control->Git->use credencial helper打勾即可。

2025-05-10 01:05:59 87

原创 Android高工面试实战二(2025)

1.如何设计一个IO密集型线程池和一个CPU密集型线程池?JAVA 线程池 cpu密集型和io密集型如何设置_mob64ca12d74a10的技术博客_51CTO博客2.性能优化的工具有哪些?(主要考察是否做过性能优化)3.如何启动一个前台服务?android 如何启动一个前台service_mob64ca12f18f13的技术博客_51CTO博客4.Glide内存缓存的设计说一说?5.java线程池核心线程能回收吗?怎么回收?Java 面试宝典:线程池的核心线程会被回收吗? - 知乎6.Dart中多线程是

2025-04-17 21:29:28 280

原创 Android高工面试实战一(2025)

以下面试题均来自于参加2025年4月份的一些大中小厂面试真题,可以用来开阔一下大家的思维。划重点:面试官特地问了ArrayList如何实现线程安全的。

2025-04-17 16:17:18 78

转载 RxJava常见面试题以及答案

RxJava 面试题及其答案_rxjava原理面试-CSDN博客

2025-04-14 22:28:28 41

原创 某车企面试备忘

记录两个关于Binder的问题,我感觉面试官提的非常好,作一下备忘。参考答案:Binder是Android平台的一种跨进程通信(IPC)机制,采用C/S框架。客户端通过Binder代理对象调用服务端的方法,服务端处理完请求后返回结果。如果服务端处理时间较长,客户端的线程会一直等待,直到服务端返回结果,这期间客户端线程是被阻塞的‌。

2025-04-14 20:55:38 302

原创 某通信巨头Android一面备忘

【面试官的宝典】小程序Kotlin章节有介绍。(这道题很基础但是没有去总结过很难回答全面)异步消息可以采用内存屏障保障优先级。

2025-04-03 17:51:26 163

原创 某Ai上市公司Android岗现场一面

(JVM)中,堆内存分为新生代(Young Generation)和老年代(Old Generation)。随着应用程序的运行,老年代的数据会越来越多,可能导致频繁的全局垃圾回收(Full GC),影响应用程序的性能。解决这个问题需要采取一系列措施。

2025-04-02 20:10:39 616

原创 上海某海外视频平台Android高级工程师视频一面

答:如果客户端不随机产生一个密钥,拿到公钥就可以直接破解发送的数据了。面试官又问了一个很好的问题:为什么客户端还要产生一个密钥?小程序【面试官的宝典】里面Android基础部分有讲到。都是对象锁,没什么本质的不同。

2025-04-01 18:46:29 345

原创 Android 导出CSV文件乱码问题处理

最近有一个需求,需要在Android端导出CSV文件,自测是用的WPS,没啥问题。可到了测试那边,用Excel直接打开就是乱码,需要在Excel数据里面用【从文件/CSV】打开。这样就显示非常的不方便。解决方案:使用UTF-8 BOM。

2025-01-16 13:45:23 410

原创 Git命令行忽略提交文件

有时候我们需要修改一些配置文件,但是又不想提交到Git服务器上,这时候怎么做呢?

2024-11-18 16:49:32 143

原创 Android Studio历史版本下载

最新的版本默认已经开始使用compose,Gradle的默认语言也发生了变化,但是实际工作中其实大家的使用习惯还没有跟上。

2024-10-27 04:37:33 989

原创 调整Android板子的分辨率

注意:系统是root的才行。

2024-10-18 16:04:23 491

原创 EditText inputType备忘录

【代码】EditText inputType备忘录。

2024-06-13 17:24:43 183

原创 leetcode 72-编辑距离

长度为i的word1的index是i-1,长度为j的word2的index是j-1。如果在这个index上字符一样的话,就是不需要操作的意思:dp[i][j] = dp[i - 1][j - 1]。最后一种情况不是很好理解,这里重点说明以下:简单来说,我们在word1增加一个字符,这个字符肯定是word2的字符。然后这个字符我们就不需要考虑了。dp[i][j]表示长度为i的word1转换为长度为j的word2最小编辑次数。这道题如果不用动态规划去解决,将是一个极其复杂的问题。

2023-07-25 18:00:08 279

原创 Android 11以下DialogFragment里弹出PopWindow显示问题

最近在写UI的时候发现一个非常有意思的事情,Android 11以下在DialogFragment里面弹出PopWindow,最终会被截取。应该是Android 11后这里默认设置成了true。

2023-07-19 17:26:43 1129

原创 Android无线调试

同学们应该都知道USB调试,但是有时候我们需要通过USB传输数据的时候,USB会被占用,这个时候我们该如何调试呢?这个时候就可以断开USB,愉快的使用无线调试了。这个时候我们就需要用到无线调试。

2023-04-03 18:01:50 390

原创 ViewBinding基类封装的正确打开方式

我们在日常开发中,为了避免findViewById这种低效的代码编写,可以基于ViewBinding库封装基类。但是网上很多是不正确的,今天就贴出正确的打开方式。Boolean对于java来说并不是基本数据类型,对于Kotlin才是基本数据类型。特别注意不要写成这样!

2023-01-05 17:30:23 589

原创 谈一谈Android适配(从蓝湖切图模糊问题说开去)

最近在新的项目画UI的时候,从蓝湖导出切图后,发现显示很模糊。最后发现是蓝湖设置问题,没有正确计算不同dpi目录下的图片像素值。适配问题看起来很简单,但是很多细节却很容易被忽略,而且网上也有一些文章讲解的并不准确。意思是屏幕纵向上有1920个像素,横向上有1080个像素。一个5英寸屏幕的手机,分辨率是1920*1080。这样计算得到的是实际dpi,但是Android适配用的是系统dpi。如果对应文件夹下的图标小太多,就会导致图片模糊问题,一定要注意。屏幕尺寸的单位是inch(英寸),是指对角线的尺寸。

2022-11-15 20:33:43 2510

原创 宏银信息Android视频面试复盘

【1】DVM中的应用每次运行时,字节码都需要通过JIT编译器编译为机器码,这样会使应用程序的运行效率降低。而在ART中,系统安装应用程序时会进行一次AOT,将字节码预编译成机器码并存储在本地,这样应用程序每次运行时就不需要执行编译了,会大大增加效率。但是AOT不是完美的,它的缺点主要有两个:第一个是AOT会使安装应用的时间变长,尤其是复杂的应用。应用程序安装时并不会将字节码全部编译成机器码,而是在系统运行中将热点代码编译成机器码,从而缩短应用程序安装时间,并且节省内存。

2022-10-20 22:50:27 18

原创 Android应用程序进程启动流程

有一点需要注意:本文讲的是应用程序进程的启动流程不是应用程序启动流程,应用程序启动流程(根activity启动流程)后面会有专门文章讲解。

2022-10-10 17:45:40 1561

原创 Android系统启动(下篇)

路径:frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java。路径:frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java。路径:frameworks/base/core/java/com/android/internal/os/ZygoteInit.java。

2022-10-10 15:11:52 1521

原创 Android系统启动(上篇)

前面我准备开始讲性能优化,讲到一半发现根本讲不下去。性能优化是基于对Framework深入理解的基础上的应用,如果对Framework没有深入的理解的话,又怎么能去很好的去做性能优化呢?所以,我调整了一下顺序。先讲清楚Framework这一块,然后再去补充性能优化专题。我们也是从开机到应用程序画面显示在我们面前这一流程开始。

2022-10-09 22:48:12 2168

原创 Android性能优化之【启动优化】

我们都知道,现在的App已经由增量阶段转化为存量阶段。所以做好一款App是比做出一款App更重要的事情,这也是我写性能优化这个专栏的初衷。我先大概讲一下性能优化我准备讲那几块,大家都知道性能优化的方向有很多,不可能都去讲解。删繁就简就显得尤为重要,大家不管是看源码还是学技术,学到核心才是最关键的,这也是我最近一段时间才逐渐领悟到的。文章更新的顺序也会按这个顺序来,我个人感觉性能优化掌握这几块通用的基本差不太多,如果后面有从事性能优化专项工作的同学可以在这个基础上深入。

2022-09-26 22:47:50 959

原创 RxJava 一篇文章就够了

结果:被观察者经过一条链路的转化传递给观察者,是一种基于事件流的链式调用。

2022-09-21 05:02:30 497

原创 EventBus 一篇文章就够了

我们知道Android开发早期各种Activity之间,Fragment之间,Activity和Fragment之间传递数据显得不是那么的友好。EventBus的出现大大提高了组件之间的数据传递效率,大大降低了接口回调传递数据所带来的代码耦合。EventBus很小巧,运行效率高,因此早期被大量运用在各种项目中。早年我写过一篇关于EventBus的文章,基本上把原理也讲的差不多了,今天再次捡起来做一个总结。

2022-09-19 22:02:54 621

原创 Retrofit原理 一篇文章就够了

我们知道Retrofit是基于OkHttp的一层封装,Retrofit本身不负责网络请求,而是将请求交给OkHttp处理。我们知道,Retrofit的请求是写在一个个接口里面的,这样同样baseUrl的请求就可以写在一个接口里面,非常方便拓展和管理。而且直接将数据解析到javaBean,并且自动切换线程。这样就有效的解决了OkHttp的使用问题。我们网络访问已经有了OkHttp,那为什么还需要一个Retrofit呢?上图是对Retrofit职责的一个很好的描述。

2022-09-15 23:21:04 624

原创 OkHttp原理 一篇文章就够了

我们学习技术的时候,一开始是会用,进阶就是深入理解其原理,然而各路框架源码,系统源码又极为庞大,我们就必须知道如何去领会其中的核心思想。今天我们就一起来理一理OkHttp的核心源码,做到知其然知其所以然!一开始我们需要初始化OkHttpClient,这里使用的是一个无参构...这篇两年前的文章我仔细看了一下,基本上调度器这一块已经讲的很透彻了,今天就不再浪费时间去讲调度器相关知识了。那么今天接着重点讲一下拦截器,我看以前的文章里面一笔带过了,估计当时我也不太理解。

2022-09-07 22:38:49 656

原创 databinding 一篇文章就够了

关于IDE自动转databinding布局的说明:将鼠标停在最外层的constraintLayout的布局的里面的空闲位置,然后同时按option+enter(Mac),就会出现convert to data binding layout提示。name是名称,可以随便写,一般最好与bean一致,type就是具体定义的类型。@{user.***}实现了数据的引用。注意,原有的设置布局的方式要换成通过DataBindingUtil的方式。运行一把:这样就完成了最基本的databinding的使用了。

2022-09-01 23:25:35 766

原创 LiveData粘性事件原理解析

有些同学可能有这样的疑惑:第二个activity还没有创建(还没有observe),为啥在第二个activity还能监听到livaData的数据变化?注释1处:将SecondActivity对象和Observer对象封装到LifecycleBoundObserver对象里面去;注释2处:将Observer对象作为键,LifecycleBoundObserver对象作为值放到mObservers里面去;大家觉得SecondActivity的吐司会不会弹呢?注释3处:将wrapper和owner生命周期绑定。

2022-08-20 10:05:12 495

Mac OS下Android投屏工具

Mac OS下Android投屏工具

2025-06-12

空空如也

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

TA关注的人

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