- 博客(33)
- 收藏
- 关注
原创 Android Activity之间跳转的原理
处理器(Handler)创建目标 Activity 实例,依次调用其。当前 Activity 在目标 Activity 启动前执行。Android Activity跳转的底层实现涉及 。封装为标准化请求,并校验权限与目标合法性。,待目标 Activity 完成。回调目标应用进程,触发。
2025-05-14 15:05:46
555
原创 个人项目总结
通过背压抽帧策略减轻引擎数据处理压力,提升识别的实时性,同时通过享元模式避免重复创建同样大小的数组和Bitmap优化内存抖动。在批改引擎存在性能瓶颈的情况下,使用Grpc流式分步返回方式,并行执行子引擎,客户端执行分步渲染,实现快速批改效果。通过安卓多进程及进程保活优化Unity游戏启动速度,通过本地计算拼图块变化避免Unity频繁渲染优化应用性能。通过集成物体检测引擎,截取作文纸内容进行OCR识别,支持多OCR任务并行,提升识别效率。批改场景通过自定义动画实现模拟老师真实批改标注效果。
2025-05-09 13:48:16
208
原创 Android OKHttp原理简单说明
BridgeInterceptor:添加通用请求头(如Content-Type、Cookie),处理响应头(如Gzip解压)。网络拦截器:在ConnectInterceptor之后执行,可获取网络层数据(如重定向后的请求)。同步请求调用execute(),异步请求调用enqueue(),最终通过拦截器链处理请求和响应。管理异步请求的线程池和请求队列,控制最大并发请求数(默认64),防止资源竞争。应用拦截器:最早执行,可修改原始请求(如添加全局Header)。
2025-05-06 16:32:07
564
原创 Android ViewModel原理简要
6、如果是配置引起的重新创建,会保留ViewModelStore中的ViewModel,然后执行onRetainNonConfigurationInstance,重新从NonConfigurationInstance中获取ViewModelStore。5、ComponentActivity持有Lifecycle,当触发Destroy时判断是否是ConfigChange,如果不是,则清除ViewModelStore中的ViewModel,如果是配置引起的Destroy,不清除ViewModel。
2025-04-27 10:30:06
258
原创 IJKPlayer的优化项
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 1024*16); // 默认值较大,调整为16KBijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0); // 禁用网络缓冲:ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,
2025-04-24 10:56:14
155
原创 Android 文字带拼音
这个自定义View可以实现文字带拼音,根据当前VIew长度自动换行,实现一句带拼音文本的多行显示,如果是诗词或者其他多段落场景,可以结合RecyclerView,此View作为一个Item显示一句文本。
2025-03-28 20:50:35
172
原创 Android进阶之RecyclerView原理
四、一些优化点本文默认你已掌握RecyclerView的基本使用,结合主流文章及自己的理解讲解下RecyclerView原理及它的一些优化点,非纯搬运。
2025-03-06 15:52:17
803
原创 Android研发小技巧(一)
工作中在使用Kotlin和日常工作总结了一些小技巧点,不定期更新,这里记录下。11、Fragment获取AcitivityViewModel。5、RecyclerView适配器的简单写法。1、根据上下文获取Lifecycle对象。6、自定义View的简单写法。14、进一步查看错误信息。7、修改项目的git地址。9、AndroidX升级。10、强制使用依赖库。
2025-03-04 14:28:23
195
原创 Android由简到深之Handler
,如果没有消息处理的时候,next()方法就会阻塞在这里,而阻塞却没有导致当前线程ANR的原因,是因为native的nativePoolOnce方法时候,调用了linux低层,使当前线程腾出CPU的使用权,处于休眠等待状态,直到休眠时间结束或消息入队被唤醒。首先我们要知道,在我们持有一个handler的时候,我们的post,postDelay,发送的事件,Handler是不会立刻响应的,它们会在一个队列里,Handler会不断取出我们发送的事件,一个个处理,那么我们再来看,这个流程涉及到了哪些类。
2025-03-04 14:11:03
806
原创 Android 弹窗弹出时隐藏底部导航栏
原理为弹窗设置不可获取焦点,在弹窗弹出后去除不可获取焦点标签,使弹出可以点击额外区域取消,且不会发生点击穿透,然后兼容部分机型,在弹出后调用hideNavigationBar隐藏状态栏。使用方法是在Dialog或者FragmentDialog的onCreate方法中直接调用initHideNavigationBarConfig()即可。我们在设备使用虚拟键导航时,弹窗弹出会调起底部导航栏导致抖动一下,原因是因为Dialog获取到了焦点导致导航栏被唤起。基于Kotlin的扩展方法,这里写一个工具类。
2024-03-19 16:09:06
1023
原创 Android常见面试问题及其答案
思考:我们上面已经知道String是指向常量池的,它的值是不可变的,变更时其实是使用了StringBuilder进行拼接,再将拼接后的值在常量池中的地址指向给String,StringBuilder和StringBuffer的区别是前者线程不安全,效率高,后者线程安全。思考:String不可变的代码层原因是它的本质是一个设置为final的byte数组,内容不可变更,设计上是基于稳定考虑,毕竟不可变的对象是原子性的,线程安全的,避免了变化引起的问题。String b = "he"+"llo" (常量池)
2023-10-30 17:14:59
189
原创 安卓 synchronized(this)和synchronized(object)区别
synchronized(object)在多线程调用当前对象时,只阻塞同一个object对象的方法,而不是阻塞所有的synchronized方法,使用起来更加灵活。synchronized(this)在多线程调用this这个对象时,锁粒度比较大,它会将所有synchronized方法都阻塞。简单的线程锁一般有两种写法,它们本质上的区别是。
2023-07-31 17:39:04
214
原创 Android 抽屉组件DrawerLayout的简单使用
对于点击屏幕上按钮,从屏幕外上下左右划出一个菜单的场景,Android原生的DrawerLayout简单实用,这里记录一下<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/home_drawer_lay
2022-05-20 14:22:43
2415
原创 Android 23种设计模式:(零)面向对象的六大原则
设计模式是安卓最重要的进阶知识之一,好的代码结构必定由各种设计模式组成,而学习设计模式之前,我们要了解面向对象的六大原则六大原则是设计模式的基础理念,这里只需要理解记忆,学习完所有的设计模式后,再回来看六大原则,应该能有很大的收获1、单一职责原则单一原则很简单,就是将一组相关性很高的函数、数据封装到一个类中,每个方法的职责单一这个原则是最简单,也是最难的一点,因为方法职责单一的界定,一般需要开发者自己的经验来判断举例说明class A{ // 执行第一步 pri..
2021-10-29 17:01:21
1127
原创 Android Studio无法手动设置NDK路径问题
点击File->Project Structure后,打开的这个界面无法配置NDK localtion解决方式是直接在local.properties中配置ndk路径
2021-10-29 10:50:42
4606
3
原创 Android WebSocket原理及实战(二)
上期原理篇我们讲到了WebSocket和HTTP的区别及其优缺点,这期主要是实战部分,大多数Android项目不需要使用第三方重量级的WebSocket框架,所以我以OKHttp3.0自带的WebSocket为例,来进行讲解添加依赖implementation "com.squareup.okhttp3:okhttp:4.9.0"实现步骤 构建OkHttpClient配置初始化一些参数。 使用WebSocket的Url地址连接。 设置WebSocket的连接状态回..
2021-10-28 18:26:42
3622
4
原创 Android WebSocket原理及实战(一)
近来封装了一个基于WebSocket服务的库,过程中对WebSocket进行了总结,分几个章节进行讲解,看完后,应该能够对以下内容有个简单的了解1、WebSocket原理2、WebSocket与Http的区别3、为什么要使用WebSocket4、Android端WebSocket实战下面开始WebSocket伴随HTML5协议横空出世,这里的HTML5指的是一系列新规范,新技术,那么在HTML5之前,为什么没有WebSocket,而现在WebSocket的加入,又是为了解决什么问题呢
2021-10-28 16:32:32
4023
原创 解决OpenCv 图像倾斜90度或者倒立的问题
最近在做人脸识别,刚刚把OpenCvSDK环境配置好,就发现预览时的图像惨不忍睹,前置斜着,后置也有问题,所以做了些修改,解决了前置和后置各自的角度问题直接搜索CameraBridgeViewBase这个类,替换成下面的代码 public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac...
2018-08-31 11:16:46
2017
1
原创 Android Tv 焦点移动特效项目学习经验1
1. android:clipChildren的意思:是否限制子View在其范围内参考文章 http://blog.youkuaiyun.com/flymoon1201/article/details/446464732. android:clipToPadding 设置绘制区域是否不包括padding,常用于解决ImageView设置padding属性无效等问题参考文章 http://blog.
2017-10-09 16:56:01
316
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人