Android开发现状

android开发工作难(为什么Android程序员越来越难找到工作了)(1)

如何看待一个行业行不行?有两点:

● 这个行业有没有死亡?

● 有没有很多公司提供这个行业的岗位?

拿塞班来举例,塞班完全死亡了,因为塞班完全被Android和iOS给替代了,并且没有公司来提供塞班的开发岗位

对于Android,目前Android正如日中天,其在移动设备上的全球占有率不用我多说了吧,各种车载设备、电视等都是Android系统。若干年内,不存在一个新的平台

为什么Android程序员难找工作了?

● Android程序员失业的事情,若干年内都不会出现

但是近期的确不是那么好找工作了,原因有如下几点:

● 疫情的风口未过

● 由于APP创业风口已过,大批创业公司死亡,导致了Android岗位减少;

● 一些公司并不需要一个Native的APP,他们只需要在APP中嵌入一个网页;

● RN、Weex对Native概念的冲击

对开发者的工要求

● 现在的终端开发已经开始进入稳定期,在这个阶段大厂压力很大小厂更会收到挤压,人们使用的App越来越固定

● 即使是大厂,几年前平台级应用发个Push就能引流几十万,现在这些的作用也越来越小,特别到了今年,想要在Top 100的App里突

面试时总被面试官挖的Android基础题掉坑里?面试试题分享性能优化

如何对 Android 应用进行性能分析?

● android 性能主要之响应速度 和UI刷新速度

● 可以参考博客:Android系统性能调优工具介绍

● 首先从函数的耗时来说,有一个工具TraceView 这是androidsdk自带的工作,用于测量函数耗时的

● UI布局的分析,可以有2块,一块就是Hierarchy Viewer 可以看到View的布局层次,以及每个View刷新加载的时间

● 这样可以很快定位到那块layout & View 耗时最长

● 还有就是通过自定义View来减少view的层次

什么情况下会导致内存泄露?

● 内存泄露是个折腾的问题

什么时候会发生内存泄露?内存泄露的根本原因:

● 长生命周期的对象持有短生命周期的对象

● 短周期对象就无法及时释放

如何避免OOM

减少内存对象的占用 ● ArrayMap/SparseArray代替hashmap

● 避免在android里面使用Enum

● 减少bitmap的内存占用

inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入

decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异

● 减少资源图片的大小,过大的图片可以考虑分段加载

内存对象的重复利用

● 大多数对象的复用,都是利用对象池的技术

● listview/gridview/recycleview contentview的复用

● inBitmap 属性对于内存对象的复用ARGB_8888/RBG_565/ARGB_4444/ALPHA_8 这个方法在某些条件下非常有用,比如要加载上千张图片的时候

● 避免在ondraw方法里面 new对象

● StringBuilder 代替 Android 中如何捕获未捕获的异常

怎么避免ANR

ANR的关键

● 是处理超时,所以应该避免在UI线程,BroadcastReceiver 还有Service主线程中,处理复杂的逻辑和计算

而交给work thread操作

● 避免在Activity里面做耗时操作,oncreate & onresume

● 避免在onReceiver里面做过多操作

● 避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。

● 尽量使用handler来处理UI thread & workthread的交互

什么是 AIDL 以及如何使用?

● Android Interface Definition Language AIDL是使用bind机制来工作

参数:

● Java原生参数

● String

● parcelable

● list & map 元素 需要支持AIDL

Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么?

Framework是android 系统对 linux kernel,lib库等封装,提供WMS,AMS,bind机制,handler-message机制等方式,供app使用

● 简单来说framework就是提供app生存的环境

● Activity在attch方法的时候,会创建一个phonewindow(window的子类)

●onCreate中的setContentView方法,会创建DecorView

● DecorView 的addview方法,会把layout中的布局加载进来

Android 屏幕适配

● 屏幕适配的方式:xxxdpi, wrap_content,match_parent. 获取屏幕大小,做处理

● dp来适配屏幕,sp来确定字体大小

● drawable-xxdpi, values-1280*1920等 这些就是资源的适配

● wrap_content,match_parent, 这些是view的自适应

● weight,这是权重的适配

android开发工作难(为什么Android程序员越来越难找到工作了)(2)

那么我们该如何不被时代淘汰?

我这里整理了一份完整的《2022年 Android 中高级面试题汇总》希望这份系统化的技术体系对大家有一个方向参考

有需要的同学,可以顺手给我点赞评论支持一下

内容如果对大家有用的话,可以转发分享一下

获取方式私信发送“面试”或“进阶”即可免费获取

《2022年 Android 中高级面试题汇总》

由于篇幅有限,仅展示部分内容

第一章 Java 基础

第一节 静态内部类和非静态内部类的比较

1.1 静态内部类和非静态内部类的区别

1.2 扩展:内部类都有哪些?

1.3 同部内部类

1.4 匿名内部类:是一种没有炎名的内部类

第二节 多态的理解与应用

2.1 多态概述

2.2 多态中成员的持点

2.3 instanceof关桩字

2.4 多态的转型

2.5 多态案例

android开发工作难(为什么Android程序员越来越难找到工作了)(3)

第三节 java 方法的多态性理解

3.1 什么是java的多态

3.2 远行时多态3.3代码理解

3.4 深一点

3.5 再深一点

3.6 最后一个炼习

第四节 java中接口和选承的区别

第五节 线程池的好处,详解,单例(绝对好记)

5.1 线程池的好处

5.2 线程池的详解

5.3 线程池的单例

android开发工作难(为什么Android程序员越来越难找到工作了)(4)

第二章 Android 基础

第一节 Activity 知识点(必问)

1.1 Activity 启动过程全解析

1.2 启动模式以及使用场景

1.3 onSavelnstanceStatelJBonRestorelnstar

1.4onConfigurationChanged使用以及问题解决

android开发工作难(为什么Android程序员越来越难找到工作了)(5)

第二节 Fragment 知识点

2.1 Fragment的通信问题,新建Fragment为何不

2.2 为什么官方推荐Fragment.setArguments(B

2.3 Androidx下Fragment懒加载的新实现

2.4 Fragment全解析系列(一):那些年深过的

2.5 Google-Fragment 概览

2.6 Google -与其他 Fragment 通信

android开发工作难(为什么Android程序员越来越难找到工作了)(6)

第三节 Service 知识点

3.1 Handle 知识点(必问)

3.2 Android 主线程阻塞处理及优化

3.3深入聊聊Android消息机制中的消息队列的

3.4深入理解MessageQueue

3.5 你真的懂Handler.postDelayed(的原理吗?

3.6 Handler.postDelayed0是如何精确延迟指成

3.7 Handler 延迟消息执行机制,会阻塞吗?

第四节Intent知识点

4.1 Android 跨进程传递大内存数据

4.2 数据存健

android开发工作难(为什么Android程序员越来越难找到工作了)(7)

获取方式私信发送“面试”或“进阶”即可免费获取

技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面

Android 架构师之路还很漫长,与君共勉

PS:有问题欢迎指正,可以在评论区留下你的建议和感受;

欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下

,