自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老皮的博客

一位在移动开发领域苦苦前行者

  • 博客(418)
  • 收藏
  • 关注

原创 为何底层原理让大家都成为了卷王?

业内一直有一个说法:技术好的未必底层够硬,但底层扎实的学起来进步如飞。这也是为什么如今的大厂都非常注重对底层原理的考察:除了可以看出面试者的即战力,底层原理更能看出一个开发者的发展潜力。大家对此应该也深有感受,在面试的过程中,底层原理是无论如何都躲不过去的一关。最典型的就是Framework,很多大厂在招聘中都对此做出了明确的要求:为什么大厂必问FrameworkAndroid Framework 开发虽然比较偏底层,圈子窄,但是能掌握一些原理的东西,可以触类旁通,往应用层发展也可以,接下来我们看看

2022-02-08 20:19:13 22147 35

原创 性能优化全新思路,实践腾讯、字节、阿里、百度、网易等互联网公司项目实战+案例分析(附PDF源码).

前言众所周知,移动开发已经来到了后半场,为了能够在众多开发者中脱颖而出,我们需要对某一个领域有深入地研究与心得,对于Android开发者来说,性能优化的学习与实践是技术人员成长进步的一条途径,同时也是改善代码质量的一次机会。一个产品的好坏,除了功能强大,性能也势必不能差,但不夸张的说任何App都存在相对于的性能问题。而想成为一个顶尖的Android开发工程师,解决这些问题成为你必不缺少的技能之一,从这篇文章开始,笔者将会带领大家一步一步深入探索到互联网一线大厂Android的性能优化项目实战中,从实战中找

2021-09-22 19:51:23 3046 4

原创 【优货精选】详解阿里Android架构进阶,Android中高级开发进阶必备资料

前言架构师筑基必备技能第一章深入Java泛型第二章注解深入浅出第三章并发编程第四章数据传输与序列化第五章 Java虚拟机原理第六章反射与类加载第七章高效IOAndroid Framework 精编内核解析第一章深入解析Binder第二章深入解析Handler消息机制第三章Dalvik VM进程系统第四章深入解析WMS第五章PackageMS启动360°全方面性能调优第一章、设计思想与代码质量优化第二章、程序性能优化第三章、开发效率优化设计思想解读开源框架第一章、热修复

2021-08-30 15:17:52 1819 6

原创 Android实现原生分享功能

3.去对应的平台下载jar包,参考官方设计文档写出自己的分享demo,但这种一般也比较复杂,尤其搞不懂qq和微信一家公司的,为什么微信那么麻烦。本文实例为大家分享了Android实现分享功能的具体代码,供大家参考,具体内容如下。2.Android Framework学习指南,助力成为系统级开发高手。因为公司的需求,最近一直在做分享这一块的功能。其中微信的分享只能分享文字和图片,不能单独分享图片或者文字。10.Android零基础入门到精通,高手进阶之路。7.Kotlin从入门到实战,全方面提升架构基础。

2024-02-20 07:45:00 271

原创 再不提升,Android这块也要呆不下去了

还记得刚开始工作时,每到周末我就只想好好休息,放松自己,玩玩游戏。那时的我,觉得这样的生活挺满足的,也没想过要改变。可时间一晃,六年过去了。直到有一天,组里突然要裁员,一些同事失去了工作。看到那些焦虑的面孔,我突然意识到,如果哪一天我也变成这样,我该怎么办?特别是想到那些还要还房贷的同事,我更加感到压力山大。那一刻,我告诉自己,不能再这样下去了。我不想让自己陷入失业的困境,更不想让生活变得一团糟。我得做出改变,得让自己变得更加强大。于是,我开始制定计划,利用周末的时间来提升自己。

2024-02-20 07:15:00 800

原创 Android从零开始搭建MVVM架构(5)—— LifeCycle详解

activity 和fragment 是有声明周期的,有时候,我们的很多操作需要写在声明周期的方法中,比如,下载,文件操作等,这样很多情况下回导致,我们在activity中的声明周期方法中写越来越多的代码,activity或者fragment 越来越臃肿,代码维护越来越困难。一定要清楚,后面会用到。接下来,我们要做的是要写一个需要拥有声明周期的类,正常我们自定义控件啊,或者做其他逻辑的类,是没有声明周期的,现在有了LifecycleObserver,我们可以让一个普通的类拥有感知声明周期变化的能力。

2024-02-16 10:54:38 769

原创 老码农的逆袭:八年Android开发经验者的职业发展心得

作为Android工程师,我们得好好规划自己的职业生涯啊!特别是20多岁、30多岁的朋友们,可能对未来有点儿迷茫,今天我就来给你们支几招。首先啊,咱们得想一想,等咱们40岁的时候,怎么才能保持自己的竞争力呢?现在科技这么发达,新东西层出不穷,咱们得不断学习啊!要是偷懒不学,很可能就被行业淘汰啦。那为啥有些程序员在职场中发展不好呢?其实啊,很多人在工作中都容易犯错。有的人埋头编程,不关心外面的新技术;有的人工作太死板,没挑战;还有的人光顾着技术,忘了团队合作和沟通也很重要。

2024-02-16 10:51:57 690

原创 Android从零开始搭建MVVM架构(4)——LiveData

Livedata 是 Google 推荐的 Android 架构组件之一,是一个存放可被观察的数据持有类,有生命周期感知功能,解决了android开发者需要去手动处理生命周期的痛点。比如当我们使用 Retrofit+Rxjava处理接口回调数据时,需要考虑activity 或 fragment 生命周期,以解决 onStop 或 onDestory之后回调数据的问题。现在只需要 Retrofit+Livedata 就好,其他的 Livedata 帮你做了。

2024-02-07 07:45:00 1725

原创 助力!2024年Android面试:经典面试题及答案解析

首先,面试是求职过程中不可或缺的一环,而Android开发面试更是考验着我们的技术实力和应变能力。同时,我们还需要注意面试时的表达和沟通技巧,展现出自信和能力。为了帮助大家更好地准备面试,我整理了一些2023年12月份最新的面试素材,分享给大家。最后,我想说的是,无论内卷有多么严重,只要我们不断努力提高自己的能力,做好充分的准备,相信机会总会留给有准备的人。由于面试内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要2024年Android中高级最全面试真题答案 完整文档的可。

2024-02-07 06:00:00 242

原创 突破月薪30K的Android开发面试:八股文背后的真谛

前两天,有读者在后台留言表示疑惑:为了进入大厂,他投入了大量的时间和精力进行面试准备,也做了很多题目。然而,他开始怀疑这些题目的实用性,不知道自己是否只是在为面试而刷题,这样的做法是否浪费时间。我认为,在当前的环境下,当你还无法改变现状时,最明智的做法是了解并适应规则,然后找到在这个规则下的最佳策略。如果你渴望进入大厂或一个更广阔、更优秀的平台,你需要做好两方面的准备:首先,你需要拥有真正的技能和实力;其次,你需要认真对待面试的准备过程。而刷题是面试准备的一部分。

2024-01-31 14:01:30 365

原创 Android从零开始搭建MVVM架构(3)——ViewModel

ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据,ViewModel中数据会一直存活即使 activity configuration发生变化。activity 在销毁重建时,之前我们可以用 activity 的onSaveInstanceState()机制保存和恢复数据,但缺点很明显,onSaveInstanceState只适合保存少量的可以被序列化、反序列化的数据,假如我们需要保存是一个比较大的 bitmap list ,这种机制明显不合适。ViewModel 就可以解决

2024-01-31 07:45:00 940

原创 Android从零开始搭建MVVM架构(2)——Databinding之BindingAdapter

<variable

2024-01-26 08:15:00 957

原创 鸿蒙(HarmonyOS)风起,何去何从?

近期,鸿蒙系统行业热度持续高涨。2024年1月18日,鸿蒙OS Next开发者预览版的发布引起了广泛关注,再度成为热议焦点。作为华为的掌门人,余承东曾表示2024年是鸿蒙的关键之年,预示着未来将有重大动作。此前,有传言称鸿蒙Next版本将不再兼容安卓,这一消息激发了业界人士的关注。自此,众多公司纷纷加入鸿蒙原生应用开发的行列,积极布局这一新兴领域。随之而来的是各大公司为招聘鸿蒙开发人才而提供的丰厚待遇,鸿蒙开发人才成为了市场上的抢手货。仿佛让我们回到了那个黄金时代。

2024-01-26 07:45:00 1007

原创 挑战BAT大厂:详解Android开发面试常问的100道题目

你面试的时候,面试官让你写一个单例,你不会,问你java的锁有几种,你不会…不会你记下来,一个个总结,然后回来赶紧找资料,了解一下原理,使用方式等等,面试多了,自然就知道自己的不足,通过大量的总结,你就会越来越强.考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档,如果有需要的朋友可以扫描下方二维码免费领取!!!目录第一章 Java方面Java基础部分Java集合Java多线程Java虚拟机第二章 Android方面。

2024-01-22 14:08:55 854

原创 Android从零开始搭建MVVM架构(1)——Databinding入门

DataBinding是谷歌官方推出的一个库,DataBinding库来写声明的layouts文件,可以用最少的代码来绑定你的app逻辑和layouts文件。Data Binding库不仅灵活而且广泛兼容- 它是一个support库,因此你可以在所有的Android平台最低能到Android 2.1(API等级7+)上使用它。需求:Android Plugin for Gradle 1.5.0-alpha1 或 更高版本。

2024-01-22 08:15:00 1576

原创 Flutter 高性能原理浅析

这里也为想要学习Flutter的朋友们准备了两份学习资料《Flutter Dart语言编程入门到精通》《Flutter实战》,从编程语言到项目实战,一条龙服务!!

2024-01-17 08:30:00 858

原创 Android面试通关秘籍:让你轻松征服面试官!

一转眼,2023就过去了,金三银四又要拉开序幕,那么我们的Android程序员关于Android开发岗位的面试,大家知不知道要对哪些知识点做准备呢?本文给大家整了一套涵盖Android所有技术栈的快速学习方法和笔记。目前已经收到了七八个网友的反馈,说是面试问到了很多这里面的知识点。oom就是我们常说的Out of Memory内存溢出,它是指需要的内存空间大于系统分配的内存空间,oom后果就是项目程序crash;1、加载大图片导致内存溢出2、大量内存泄露。

2024-01-17 07:30:00 881

原创 【Android】 Camera Framework层分析

首先调用模板类的connect()函数,在函数中向 ServiceManager获取Camera服务信息,并生成CameraService服务代理 BpCameraService(/frameworks/av/camera/ICameraService.cpp),然后通过Binder通信发送 CONNECT命令,当BnCameraService收到CONNECT命令后调用CameraService的connect()成员函数来做相应的 处理。4.企业级Android音视频开发学习路线+项目实战(附源码)

2024-01-11 08:00:00 907

原创 【Android现状】20K 不是终点:为何公司宁愿重新招人?

我的一个朋友在阿里上班,勤勤恳恳工作了两三年,公司却迟迟不给他涨工资。他来找到我,他说他很苦恼,说公司最近新来了一个员工都比他的工资要高,就因为他对性能调优这方面很擅长。那么,究竟什么是性能优化?简而言之,就是让手机里的应用程序运行得更快、更流畅、更高效。在功能相同的应用程序中,决定哪一个更能赢得用户的青睐,往往是其性能的优劣。如今,许多软件开发公司和开发者追求的目标不仅仅是实现功能,更是提供无与伦比的用户体验。而性能问题恰恰是影响用户体验的关键因素。那么,为什么要对应用程序进行性能调优呢?

2024-01-11 08:00:00 994

原创 不是Android不够好,而是学习鸿蒙更有性价比

鸿蒙(HarmonyOS)和安卓(Android)都是移动操作系统,它们有很多相似之处,但也存在一些差异。鸿蒙系统是一款面向各种设备的分布式操作系统,可以在不同类型的设备上运行,如手机、平板电脑、智能手表、智能家居、汽车等,实现无缝切换和共享数据。相比之下,安卓系统主要用于移动设备,如手机和平板电脑,其设备兼容性相对有限。鸿蒙系统采用了分布式技术,其设计理念是“能用分布式解决的问题就不用单机解决”。这意味着鸿蒙旨在构建一个统一的分布式操作系统,可以支持不同设备之间的交互和通信。

2023-12-29 07:15:00 926

原创 设计模式学习之模版方法模式

同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。在Android源码中,View中的Draw()方法就是一个“模板方法”。

2023-12-29 07:00:00 824

原创 设计模式学习之代理模式

而ServiceManagerProxy的setService方法则是通过反射获取ServiceManager中的sCache ,移除系统 Service,然后将我们自己改造过的 Service put 进去,这样就能实现当调用 ServiceManager 的 getService(String name) 方法的时候,返回的是我们改造过的 Service 而不是系统原本的 Service。Proxy:代理类,持有对真实主题类的引用,在其所实现的接口方法中调用真实主题类中相应的接口方法执行。

2023-12-22 08:15:00 904

原创 设计模式学习之策略模式

*定义:**策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。

2023-12-22 08:00:00 829

原创 趁着鸿蒙开发已成为时代新风口,抓住学习鸿蒙开的好时机

近期,华为宣布其自主研发的鸿蒙Next系统将不再兼容Android系统,而是完全独立运营。也就是说,你的 Android APK 已经不能在 HarmonyOS NEXT 上运行,因为系统已经不存在 AOSP 代码,甚至没有 JVM。此举意味着鸿蒙系统将退出随着鸿蒙设备已达7亿台,目前的情况来看,多家头部互联网公司正在积极参与布局鸿蒙原生应用开发。随后,在招聘网上也查看了一下,美团紧急招聘鸿蒙相关的岗位,其岗位的薪资大都与安卓开发平齐甚至有的还比安卓开发相关岗位的薪资要高得多。

2023-12-13 09:00:00 1019

原创 Android热修复学习之旅——Andfix框架完全解析

通过方法名和本地已有的该方法的参数信息获取有bug的方法,然后将有bug的方法和修复的方法一起传入进行修复 注意:上面的操作,传入的是修复新的方法信息以及需要修复的旧方法名称,不过这里得先获取到旧方法类型,可以看到修复的新旧方法的签名必须一致,所谓签名就是方法的名称,参数个数,参数类型都必须一致,不然这里就报错的。接下来就是交给native方法了,由于Android4.4后才用的Art虚拟机,之前的系统都是Dalvik虚拟机,因此Natice层写了2个方法,对不同的系统做不同的处理方式。

2023-12-13 07:45:00 1634

原创 Android热修复学习之旅——HotFix完全解析

QQ空间热修复方案基于Android dex分包基础之上,简单概述android dex分包的原理就是:就是把多个dex文件塞入到app的classloader之中,但是android dex拆包方案中的类是没有重复的,如果classes.dex和classes1.dex中有重复的类,当classes.dex和classes1.dex中都具有同一个类的时候,那么classloader会选择加载哪个类呢?理论上,如果在不同的dex中有相同的类存在,那么会优先选择排在前面的dex文件的类。

2023-12-09 07:45:00 954

原创 Android热修复学习之旅开篇——热修复概述

可以看到上图中,将修复后的Test.class类打包进patch.dex中,然后放入了dexElements的最前面,当虚拟机加载Test.class时,会按顺序对该类进行查找,由于包含patch.dex中的Test.class是最前面,就会优先加载,在后续的dex中遇到Test.class的话就会直接返回而不去加载,这样就达到了修复的目的。所以就出现了热修复技术,通过打补丁的方式,通过从。下载补丁包,然后对有问题的类中出问题的方法,进行替换,优点是用户无感知修复,无需下载新的应用,代价小。

2023-12-09 07:15:00 942

原创 鸿蒙OS应用开发初体验

分享一份是来自华为内部最新的《鸿蒙零基础入门学习指南》内容如下,完整文档可以扫描二维码免费领取!!!## 《鸿蒙零基础入门学习指南》本文档适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用,快速了解工程目录的主要文件,熟悉HarmonyOS应用开发流程。

2023-11-28 08:15:00 1753

原创 学鸿蒙开发有前途吗?学鸿蒙为时尚早

最近我也在对鸿蒙进行学习,也整理了一份入门资料,有兴趣的朋友需要的可以扫码免费领取!!!

2023-11-28 08:00:00 936 1

原创 CoordinatorLayout使用全解析

CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承自FrameLayout,给它设置layout_scrollFlags,它可以控制包含在CollapsingToolbarLayout中的控件(如:ImageView、Toolbar)在响应layout_behavior事件时作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端)。记住,要把带有scroll flag的view放在前面,这样收回的view才能让正常退出,而固定的view继续留在顶部。

2023-11-25 07:45:00 887

原创 在做程序员的道路上,你到底在工作什么?

如果可能,尽快地去锻炼自己的代码能力,这对于你之后的面向副业是非常有帮助的。绝大多数人不是天才,如你和我一样都是普通人,那么普通人有普通人的活法。我们可能没办法去钻研出一段代码改变世界,但是可以去找一个场景和应用,通过技术在里面创造出价值来,会有很多人愿意为这种价值买单的。换个角度想,公司给你的工资确实是购买了你的劳动力,但还为你培养个人副业买单了!公司妥妥的大冤种,哈哈哈哈。努力做到上面这些点,就能把公司变为大冤种!

2023-11-25 07:15:00 682

原创 Android设计模式学习之Builder模式

可以看到,通过Builder来设置AlertDialog中的title, message, button等参数, 这些参数都存储在类型为AlertController.AlertParams的成员变量P中,AlertController.AlertParams中包含了与之对应的成员变量。1.相同的方法,不同的执行顺序,产生不同的事件结果时;在Android源码中,我们最常用到的Builder模式就是AlertDialog.Builder, 使用该Builder来构建复杂的AlertDialog对象。

2023-11-13 07:45:00 153

原创 不出意外,又是一波失业潮......

不是贩卖焦虑,不是贩卖焦虑,不是贩卖焦虑!首先,重要的事情说三遍。最近,失业潮的阴云再次笼罩着我们,脉脉上传蔚来开始裁员,明年,华为OD即将全员转WX。不少人惶惶不安,担心着自己会不会成为下一个失业的牺牲品。确实,整体的大环境正一步一步压缩着我们的工作空间,这是我们无法控制的。我们能控制的只有自身,对于我们程序员来讲只有尽可能提升核心竞争,才能在着浪潮中屹立不倒。那么什么才是我们安卓人的核心竞争力呢?就拿近期精通Android Framework等底层技术显然成为。

2023-11-13 07:00:00 165

原创 完全掌握Android版kotlin协程,你准备好了吗?

Kotlin协程是目前很流行的一款用于异步任务处理的库,都知道它处理异步任务特别好用,但是很少人去探究它背后的原理。还有一点,由于它是用于处理异步任务的,很多人将协程与线程做对比,也有一些人将协程与Rxjava做对比。这篇文章将从最简单的用法开始,层层递进的讲解协成知识点。更多的kotlin协程知识可以扫描下方二维码免费领取资料!!!1.1 协程是什么1.2 什么是Job 、Deferred 、协程作用域1.3 Kotlin协程的基础用法。

2023-11-09 07:15:00 158

原创 Android设计模式学习之观察者模式

4.使用 Java API 的缺点也很明显,由于 Observable 是一个类,java 只允许单继承的缺点就导致你如果同时想要获取另一个父类的属性时,你只能选择适配器模式或者是内部类的方式,而且由于 setChanged() 函数为 protected 属性,所以你除非继承 Observable 类,否则你根本无法使用该类的属性,这也违背了设计模式的原则:多用组合,少用继承。观察者模式解除了主题和具体观察者的耦合,让耦合的双方都依赖于抽象,而不是依赖具体。从而使得各自的变化都不会影响另一边的变化。

2023-11-09 07:00:00 36

原创 深入解析Android中Handler消息机制

通过ThreadLocal.set()将这个新创建的对象的引用保存到各线程的自己的一个map中,每个线程都有这样一个map,执行ThreadLocal.get()时,各线程从自己的map中取出放进去的对象,因此取出来的是各自自己线程中的对象,ThreadLocal实例是作为map的key来使用的。首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。

2023-11-07 07:30:00 61

原创 单纯的Android应用层开发越来越少了,如今的Android开发者该如何自处?

从使用rxjava到现在的协程,从等技术,可以说每天都在更新换代。当我们使用这些技术时,很容易陷入一个误区,那就是上手容易,深入困难。尽管新技术可能几天就能掌握,但没有深入理解,久而久之,就会欠下很多技术债务。于是,许多从事Android应用层开发的人员开始向Android系统开发转型。虽然这个方向并非一定优越,但它为我们提供了更多的可能性,因为两者之间有很多相通之处。

2023-11-07 07:30:00 124

原创 Android插件化学习之路(九)之DynamicLoadApk 源码解析(下)

DLProxyImpl 主要封装了插件Activity的公用逻辑,如初始化插件 Activity 并和代理 Activity 绑定、获取资源等,相当于把DLProxyActivity和DLProxyFragmentActivity的公共实现部分提出出来,核心逻辑位于下面介绍的 onCreate() 函数。代理 Activity,他们是在宿主 Manifest 中注册的组件,也是启动插件 Activity 时,真正被启动的 Activity,他们的内部会完成插件 Activity 的初始化和启动。

2023-11-04 07:30:00 25

原创 再不翻开Framework看看就来不及了

在开发过程中,我们经常会遇到一些看似的问题,这些问题可能让我们。然而,如果我们能够深入了解,很多问题便可以迎刃而解。就像数学一样,无论题目多么复杂、深奥,都是由基本的1+1逐步引申出来的。在Android开发中,就是那个引领我们走向更深层次的1+1。很多人可能忽视了Framework的重要性,就像他们可能忽视了算法和数据结构的重要性。然而,无论我们走得多远,忽视了这些基础的知识,最终还是需要回头补课。当然,在刚开始学习时,这些基础知识可能看起来并没有什么用,但是如果没有学好加减乘除,

2023-11-04 07:15:00 337

原创 Android插件化学习之路(八)之DynamicLoadApk 源码解析(上)

(4) 插件组件:插件中的组件。(6) Base 组件:插件组件的基类,目前包括 DLBasePluginActivity(插件 Activity 的基类)、DLBasePluginFragmentActivity(插件 FragmentActivity 的基类)、DLBasePluginService(插件 Service 的基类)。(3) Proxy Impl 代理组件公用逻辑模块,与(2)中的 Proxy 不同的是,这部分并不是一个组件,而是负责构建、加载插件组件的管理器。

2023-11-02 07:15:00 40

空空如也

空空如也

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

TA关注的人

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