作者\/
文章平均质量分 85
2401_84561807
这个作者很懒,什么都没留下…
展开
-
Android NDK开发,使用ndk-build编译(1)
注意:加载生成的动态库指定的文件名(System.loadLibrary(“Java2c”);)和生成. so 时指定的名字(buil.gradle 中的 ndk{moduleName “Java2c” }),还有 Android.mk 中 LOCAL_MODULE :=Java2c三者是否一致;Java2JNIJava2c还有 Android.mk 中 LOCAL_MODULE :=Java2c三者不一致,就会出现 UnsatisfiedLinkError 异常;@Override。原创 2024-05-29 12:38:31 · 645 阅读 · 1 评论 -
Android NDK开发(一)环境搭建及运行示例
*五、**新建一个Android工程后,在new出来的Project上右键点击Android Tools->Add Native Support…如果是按照C语言的编译方式,调用foo函数是找不到_foo的函数名就会报出函数名找不到的错误。注:1.在android-ndk-r10c目录下有一个samples的目录,里面存放着例子,可供学习。Android.mk是NDK工程的Makefile,hello.cpp就是NDK的源文件。,对于实例方法,有两个参数是必要的,一个JNI的环境指针。原创 2024-05-29 12:38:00 · 1005 阅读 · 0 评论 -
Android AsyncTask源码解析
可以看到,这里先new出了一个SERIAL_EXECUTOR常量,然后将sDefaultExecutor的值赋值为这个常量,也就是说明,刚才在executeOnExecutor()方法中调用的execute()方法,其实也就是调用的SerialExecutor类中的execute()方法。这里我们模拟了一个下载任务,在doInBackground()方法中去执行具体的下载逻辑,在onProgressUpdate()方法中显示当前的下载进度,在onPostExecute()方法中来提示任务的执行结果。原创 2024-05-29 12:12:26 · 431 阅读 · 0 评论 -
Android AsyncTask 源码解析
真正执行下一个任务的时机是,线程池执行完成第一个任务以后,调用Runnable中的finally代码块中的scheduleNext,所以虽然内部有一个线程池,其实调用的过程还是线性的。主要这里的调用是在handler的handleMessage中,所以是在UI线程中。看到这里,大家可能会认为,背后原来有一个线程池,且最大支持128的线程并发,加上长度为10的阻塞队列,可能会觉得就是在快速调用138个以内的AsyncTask子类的execute方法不会出现问题,而大于138则会抛出异常。原创 2024-05-29 12:11:51 · 587 阅读 · 0 评论 -
Android Architecture Components 之 Room 篇
可以通过注解的onDelete和onUpdate属性指定级联操作,如级联更新和级联删除:有时,一个包含嵌套对象的 entity 或 POJO 表示一个完整的数据库逻辑,可以使用@Embedded注解将该嵌套对象的字段分解到该表中,如User表需要包含Address相关字段,可以使用@Embedded注解表示这是个组合列:@Entity@Embedded也就是说,User表包含idfirstNamestreetstatecity,和post_code列。原创 2024-05-29 12:10:48 · 602 阅读 · 0 评论 -
android app启动页(闪屏页)白屏快速优化方案实践
创建一个启动页界面,布局里设置背景为一张图片,并放一个textview:) {styles文件里新建一个 style ,parent 设置为来取消标题栏:AndroidManifest.xml里将该style设置给SplashActivity,方便我们后续对比效果:华为手机上运行效果如下:咦?这顶部状态栏跟底部导航栏也忒丑了点。。。。。。那。。干掉吧。。。原创 2024-05-29 12:09:56 · 433 阅读 · 0 评论 -
Android App 自身导致的性能问题案例
五、主线程 Binder 耗时六、游戏 SurfaceView 内容绘制不均匀七、WebView 性能不足八、帧率与刷新率不匹配九、应用性能跟不上高帧率屏幕和系统十、主线程 IO 操作十一、WebView 与主线程交互十二、RenderThread 耗时十三、多个 RenderThread 同步导致主线程卡顿在。原创 2024-05-29 12:09:19 · 940 阅读 · 0 评论 -
35岁的Android开发,失业海投35家公司简历石沉大海,我的代码生涯该如何走下去?
俗话说:“没有规矩,不成方圆”,没有一个良好、完整的知识体系,可以说程序员这条路很难的走下去,假如说你幸运的走下去了,到头来面对着各种各样的“中年危机”,想走技术路,技术深度不够,想做管理岗,公司又不止你一位大龄程序员,而且说不定别人在公司还有各种各样的人际关系,原创 2024-05-29 11:48:02 · 217 阅读 · 0 评论 -
35岁技术人如何转型做管理?阿里高级算法专家公开10大思考
所以,我选择信任我的同学,只在一些必须监管的事项上把关,比如数据安全、安全生产等,其他事项一般不做过程管理,只做结果管理。我的团队成员,很多都是自己领域的高手,专业能力在我之上,我就应该顺应实际情况,不要拿自己的愚见去束缚同学们的发挥。接手团队之后,我发现同学们的工作模式真的是自耕农一般:各做各的模型,各用各的数据,各读各的 paper ,完全是原子化的散点存在。我接手的时候,有 3-4 个同学全职投入这项工作,他们工作非常努力,干得也很辛苦,但是效果并不好, PK 竞品的时候并无胜算。原创 2024-05-29 11:47:31 · 1259 阅读 · 0 评论 -
2024-金三银四:阿里P9架构的Android大厂面试题总结
这里讲的是大公司需要用到的一些高端Android技术,这里专门整理了一个文档,希望大家都可以看看。万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。ViewPager使用细节,如何设置成每次只初始化当前的Fragment,其他的不初始化?两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?原创 2024-05-29 11:17:03 · 273 阅读 · 0 评论 -
2024-字节跳动,网易,华为,小米,讯飞Android开发岗面试经验总结!
简单介绍了一下自己,还有自己做过的OpenGL视图库和骨骼动画播放引擎讲了一些。但是面试官应该是不怎么熟悉这些的。不过也算突出了自己的特点了。2.然后应该是想看看我基本界面编辑会不会,然后问了常用的布局有哪些?这个问题很简单嘛,自己把FrameLayout,LinearLayout,RelativeLayout讲了一通,然后又讲了Coordinatorlayout和ConstraintLayout。原创 2024-05-29 11:16:32 · 720 阅读 · 0 评论 -
程序员如果换个方式面试,会不会不一样(阿里+字节+腾讯+小米面试经验总结
2、什么情况下会导致内存泄露(★★)3、如何避免 OOM 异常(★★★★)4、Android 中如何捕获未捕获的异常(2020.5.5)(★★★)5、 ANR 是什么?怎样避免和解决 ANR(★★★★★)6、Android 线程间通信有哪几种方式(★★★)7、Devik 进程,linux 进程,线程的区别(★)8、描述一下 android 的系统架构?9、android 应用对内存是如何限制的?我们应该如何合 理使用内存?10、简述 android 应用程序结构是哪些?原创 2024-05-29 00:50:31 · 504 阅读 · 0 评论 -
秋招斩获OPPO意向书,方向是搞 Android Framework,一点顾虑让我选择了放弃。
很多人说客户端已经饱和了,但是我们行内的人看到的是中高级开发仍然是刚需,那些初级或者连初级都不如的甚至是外行当然觉得这行走不下去了,程序员的一个刚需技能就是学习,有学习能力做哪个领域的程序员都可以。不是说前人们写的文章不好,我就是觉得他们写的不细, 有些点不讲清楚,逻辑很难通顺的,每次我学个什么东西时遇到这种情况都贼难受。本章先宏观理论分析与 Message 源码分析,再到MessageQueue 的源码分析,Looper 的源码分析,handler 的源码分析,Handler 机制实现原理总结。原创 2024-05-29 00:49:28 · 603 阅读 · 0 评论 -
一场赛跑引起的并发知识
这篇文章只是个引子,把并发编程的两个重要的类抛出来,主要介绍应用场景。具体类的用法,小伙伴们可以网上自行学习。还有CyclicBarrier和CountDownLatch两者有相同点,有些场景可以替换使用。当然他们也有不同点,小伙伴们要注重关注。!!小伙伴是不是会说,那个性能测试工具类呢?其实上面已经把90%的核心代码介绍了,把跑步抽象成外部传入的任务,在加入循环执行次数就ok了,小伙伴可以自行完善。如果小伙伴需要,关注、私信、打赏老顾,老顾会把代码链接分享给你。原创 2024-05-29 00:13:37 · 526 阅读 · 0 评论 -
一个Android开发真实的996生活,我们到底在追求什么?
不过,经过了这一年他清楚的知道,只会 996 是没有用的,只是业务上的书写,第三方库的使用而已,996 并不会一定带来高薪,毕竟企业看着的是你的产出,即使花再多时间在搬砖上,也就那个水平,怎么可能会让老板给你更高的薪酬。说好的项目奖金由于公司经营不善,决定不发,还说什么因为疫情原因,所以三个月的薪资降低了 20%,还说什么,公司会记住这些钱的,以后双倍奉还。确实,在赶项目的过程中,只为实现效果,哪会研究它们的原理,能用,不就行了吗?就这样,又过了两个月,他终于拿到了 offer,不过却比他期望中低 2k。原创 2024-05-29 00:13:06 · 240 阅读 · 0 评论 -
Android Camera 内存问题剖析
通过 android_hardware_camera2_CameraMetadata.cpp 里的注册清单可以看到与这些函数关联的 Java 层 class 是,CameraMetadata_close 函数在 Java 对应的是 nativeClose 函数。可以进一步发现 CameraMetaDataNative 里 nativeClose 函数是在 close 函数里调用的,而 close 函数又是在 finalize 函数调用的。原创 2024-05-28 23:15:05 · 893 阅读 · 0 评论 -
让控件如此丝滑Scroller和VelocityTracker的API讲解与实战——Android高级UI
小盆友以自己的理解给出这个的定义,VelocityTracker 是一个根据我们手指的触摸事件,计算出滑动速度的工具类,我们可以根据这个速度自行做计算进行视图的移动,达到粘性滑动之类的效果。从上面的 API 讲解中,我们会发现,至始至终都没有对我们需要作用的View有任何的关联,而是通过计算,然后获取当前时间点对应的坐标,如此而已。)值得注意的,在屏幕之外的柱子,其实对于用户来说是看不到的,我们也就没必要耗费这部分的资源来进行绘制,可以通过下面这段代码,判断柱子是否在可视区域内,通过一个线程来进行不断的。原创 2024-05-28 21:26:32 · 838 阅读 · 0 评论 -
被安卓人忽略的国内急缺岗位,缺口高达300万人
所以不少中大型的互联网公司,都会有多名以上的网络安全技术专家,尤其是这样的电商类的公司,他们的功能大多都是走的移动端设备,一旦有相关的安全问题泄漏那可就不是一点半点的小事了。随着时代科技的发展,运用到移动端设备功能也就越来越多,Android 逆向与安全的技术也越来越被一些公司重视,需求量也一路在增长。薪资水平也一直处于稳定增长的趋势,说到这个问题,答案估计就有五花八门的情况出现,A说这个要学,B说那个要学,C说……其实大家都没有统一的一个答案,对于想入手学的小伙伴而言,前期掌握好基础才是最重要的,原创 2024-05-28 21:25:28 · 461 阅读 · 0 评论 -
当下互联网求职环境越来越差,作为初出茅庐的程序员感觉已凉,大厂面试成了炮灰
1.谈谈activity的生命周期?当时我第一反应,woc?送分题?然后就巴拉巴拉说了一大堆但是他接下来的问题,我就有点懵逼了,那Aactivity转跳到Bactivity 它们的生命周期又是怎么样的呢?我想也不难啊,首先Aactivity肯定执行OnCreate、OnStart、OnResume、OnPause、OnStop然后Bactivity执行OnCreate、OnStart、OnResume但是我这里犯了一个错误,OnStop的作用是,当你这个界面完全不可见时,才会执行。原创 2024-05-28 20:53:51 · 222 阅读 · 0 评论 -
开发久了都知道——这份Android-Studio快捷键大全,让你的开发效率快20倍!(全网独一份
为了方便查看将上面的快捷键做一个汇总。[外链图片转存中…(img-Vc3ttHw2-1716900788098)][外链图片转存中…(img-wpP7mucA-1716900788099)]原创 2024-05-28 20:53:20 · 290 阅读 · 0 评论 -
从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
Hilt 好不好用,我们先来看看它是个什么。它是个用注解来进行配置的依赖注入库。注解是它的写法,首先它是个依赖注入库,对吧?什么是依赖注入?一个类里有两个变量,这两个变量就是它的依赖:要初始化一个依赖,有两种方法:第一,你这个类自己初始化:第二,让外部帮你初始化。其中这第二种,让外部帮你初始化你的依赖,就叫依赖注入。关键在于初始化是谁做的,至于最后一步是你把结果拿过来,还是说你连拿都不用拿,最后一步的赋值工作也让外部来帮你做了,这都不重要,只要初始化工作是外部做的,就都叫依赖注入。原创 2024-05-28 20:24:03 · 729 阅读 · 0 评论 -
今日头条 iOS 安装包大小优化 - 新阶段、新实践
图像中的每个像素点则存储颜色数组的下标代表该点的颜色。(1)成员变量部分:成员变量本质是一个大小 32B 的结构体,结构体中三个指针(Offset、Name、Type)指向的内容的大小分别为 8B、10B、10B,其中 Name、Type 指针指向的内容的大小和成员变量的类型、名字长度相关。在今日头条投入包大小优化的早期,我们曾尝试对 Asset Catalog 中的 png 图片做无损压缩,但实践后发现,虽然放入 Asset Catalog 的图片大小有了明显减小,但是构建的产物的大小却几乎没有变化。原创 2024-05-28 20:22:58 · 423 阅读 · 0 评论 -
Kotlin:字符串(String)
主要包含。原创 2024-05-28 19:50:14 · 935 阅读 · 0 评论 -
kotlin协程入门、进阶和实战三大部分,Android开发应该怎么学?_kotlin协程学习路线
2019年,Google宣布Kotlin成为所有Android应用程序的首选编程语言,由于kotlin的特性,Java开发人员转向Kotlin开发并不太难,除了两者编写相似以外,他们还具有很好的兼容性,可以在同一环境中运行。很多人说,在当前这个环境下,至少要会两种语言,现阶段Java和kotlin就是一个好选择。不过在kotlin的学习过程中,协程这块算是一个比较难的地方,难在哪里?协程是运行在单线程上的并发程序,它能够更好的为我们更好的执行高并发任务。原创 2024-05-28 19:49:43 · 345 阅读 · 0 评论 -
Android程序员的未来真的是个死胡同吗?解决了这些问题后我并不觉得如此
Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。因为在Android开发中,每个控件背后都有一套深层次的体系在支撑,自然而然,会UI不单纯指的是会自定义控件,我们还应该知道自定义控件背后的执行流程,包括从Activity的创建,XML的解析,到每个控件的测量、布局、绘制。原创 2024-05-28 19:15:26 · 665 阅读 · 0 评论 -
Android程序员架构师筑基必备:IOC控制反转与DI依赖注入(附视频讲解)
假如小三和尚去挑水了,老王主持没准要下命令给小四和尚去扫达摩院的地。这样下去的话,Laowang 这个类会疯掉的。老王主持觉得自己堂堂一届高僧,下个扫地的命令竟然这样麻烦,他觉得很不爽。原创 2024-05-28 19:14:55 · 797 阅读 · 0 评论 -
Android-Flutter-BottomNavigationBar:该如何优雅实现底部导航栏?
为了方便显示,仅显示一个文本// 页面1@override// 页面2@override// 页面3@override// 页面4@override。原创 2024-05-28 18:48:46 · 722 阅读 · 0 评论 -
2024疫情下BAT最新Android面试真题解析
Synchronized底层原理,java锁机制java容器,hashmap和hashtable区别,hashmap原理,扩容流程,扰动算法的优势ArrayList和LinkendList区别,List泛型擦除,为什么反射能够在ArrayList< String >中添加int类型Http和Https区别,SSL/TLS过程Android性能优化jvm虚拟机,堆和栈的结构,栈帧,JMM组件化注意点,组件间通信机制线程安全的单例模式有哪几种熟悉的设计模式。原创 2024-05-28 18:19:58 · 725 阅读 · 0 评论 -
2024最新统计,年薪50万+的Android开发者所必备的知识体系架构,你都会吗?(超多图哦!)
音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。这块知识是现今使用者最多的,我们称之为Android2013~2016年的技术,但是,即使是这样的技术,Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生。用户体验及资源消耗优化。图像处理与热修复应用。原创 2024-05-28 18:19:28 · 700 阅读 · 0 评论 -
2024风口浪尖上谁能吃第一波红利,弃Java转Android?我们究竟需要如何选择!
文章中资料,**来自字节跳动一位技术大牛,他有15年项目开发经验,**熟悉汇编,java,c/c++开发语言,对系统底层,web开发和移动端开发有较深入研究。对于学习Java,我们移动端开发学习Java不需要后端那么深入,我认为作为Android开发者,学习的内容包括:语言特性、基础使用、集合类&机制。4. 编程语言:Java与Java虚拟机。原创 2024-05-26 17:35:02 · 343 阅读 · 0 评论 -
Android lifecycle 使用详解
那如果是别的类的呢,比如 MediaCompoment,在 Activity 的时候,我们需要销毁一些资源,按照传统的方法,我们还是需要在 Activity onDestroy 的时候手动调用 onDestroy 方法。接下来,我们先来看一下 Lifycycle 的基本使用。MediaCompoment 在 Activity ondestroy 的时候,我们需要销毁一些资源,用传统的方法,我们需要在 Activity onDestroy 的时候手动调用 onDestroy 方法。这里同样分为几种情况。原创 2024-05-26 15:56:50 · 244 阅读 · 0 评论 -
Android kotlin使用RecyclerView实例
4、加载数据实现kotlin 代码。原创 2024-05-26 15:55:47 · 246 阅读 · 0 评论 -
Android 性能监控之——消息调度启动优化方案实践_性能优化demo
/这里为了方便模拟,直接在主线程发送耗时任务,模拟耗时消息在 启动Activity消息之前的场景。= null) { //如果已经在队列首部了,则不需要优化。Log.e(“MainLooperBoost”, “任务处理3000ms”)//标记接下来需要优化 启动Activity的相关消息。//发送3秒的耗时消息到队列中。//当前消息的下一个消息。原创 2024-05-25 22:16:12 · 305 阅读 · 0 评论 -
Android 性能优化“基石”是什么? Fps,Memory,Cpu如何采集?
我特地去翻查了下Matrix官方的wiki *https://github.com/Tencent/matrix/wiki/Matrix-Android-TraceCanary *,Martix参考了BlockCanary的代码,通过结合了下Choreographer和BlockCanary,当出现卡顿帧的时候获取当前的主线程卡顿的堆栈,然后通过LooperPrinter把当前的卡顿的堆栈方法输出,这样可以更好的辅助开发去定位卡顿问题,而不是直接告诉业务方你的页面卡顿了。然后优化了下DoKit的代码逻辑。原创 2024-05-25 22:15:41 · 305 阅读 · 0 评论 -
Android Handler源码浅析
Android开发的小伙伴对于Handler一定不陌生了,基本面试必问的东西,但是很多人都是死记硬背不了解原理,这样面试很容易就丢分了,所以本文将会简单带大家了解一下Hander源码的实现。现在我们学会了ThreadLocal,再来看一遍这个代码,这里有一个判断,如果ThreadLocal获取的值不为空,就会抛出异常,否则就存储一个Looper到当前线程,这里用了ThreadLocal的特性,可以保证我们。是在Handler两个参数的构造方法中,但是Looper并不是在这里创建的,那在哪里创建的呢?原创 2024-05-25 21:12:12 · 354 阅读 · 0 评论 -
Android Handler消息机制详解
/创建了new Looper。//一个线程中只能有一个Looper对象,否则在第二次尝试初始化Looper的时候,就会抛出异常。//只能通过Looper.prepare()方法去初始化一个Looper。//创建Looper的时候会创建一个MessageQueue。//创建Looper。原创 2024-05-25 21:11:41 · 327 阅读 · 0 评论 -
2024上半年百度Android岗(初级到高级)面试真题全收录+解析,备战金九银十!(下篇
为了加速你的view,对于频繁调用的方法,需要尽量减少不必要的代码。先从onDraw开始,需要特别注意不应该在这里做内存分配的事情,因为它会导致GC,从而导致卡顿。在初始化或者动画间隙期间做分配内存的动作。不要在动画正在执行的时候做内存分配的事情。你还需要尽可能的减少onDraw被调用的次数,大多数时候导致onDraw都是因为调用了invalidate().因此请尽量减少调用invaildate()的次数。原创 2024-05-25 19:57:21 · 401 阅读 · 0 评论 -
2024BATJZ大厂Android高级工程师面试题-选择题合集(附答案解析)
B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会。原创 2024-05-25 19:56:16 · 212 阅读 · 0 评论