【Android初级面筋】在这个要求高级开发的行情下,总结2021年180道Android岗面试题

Android视图加载优化——Factory2设置方法_android viewfactory 第三种方法是重写Activity的,改写的方法,返回自定义的。自定义的可以重写方法,加入自己的处理逻辑。这个方法是我从ViewPump学到的。 阅读详情
  • HashMap 的默认初始大小为 16,初始化大小必须为 2 的幂,最大大小为 2 的 30 次方。数组中存储的链表节点 Entry 类实现于 Map.Entry 接口,它实现了对节点的通用操作。HashMap 的阈值默认为 “容量 * 0.75f”,当存储节点数量超过该值,则对 map 进行扩容处理。

  • 线程不安全的容器,解决并发问题使用ConcurrentHashMap(高效)或者是Collections.synchronizedMap().Collections.synchronizedMap()其实就是每个方法加一个synchronize,其实和HashTable 差不多.

红黑树

  • 平衡的二叉查找树

  • 节点是红色或者是黑色

  • 根节点是黑色

  • 每个叶子的节点都是黑色的空节点(NULL)

  • 每个红色节点的两个子节点都是黑色的

  • 从任意节点到其每个叶子的所有路径都包含相同的黑色节点

  • 插入时会涉及到变色和旋转

4.jvm内存分配

Java虚拟机书中第二章

  • 程序计数器

  • Java虚拟机栈

  • 本地方法栈

  • Java堆

  • 方法区

  • 运行时常量池

  • 直接内存

1.5 String,StringBuffer,StringBuilder 区别

  • String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组.但是String里面的char数组是final的,而StringBuffer,StringBuilder不是,也就是说,String是不可变的,想要新的字符串只能重新生成String.而StringBuffer和StringBuilder只需要修改底层的char数组就行.相对来说,开销要小很多.

  • String的大多数方法都是重新new一个新String对象返回,频繁重新生成容易生成很多垃圾.

…

2. 安卓基础


1.安卓各版本大变化(Android 6.0到10.0有哪些大点变化),兼容适配

Android 5.0

  • Material Design

  • ART虚拟机

Android 6.0

  • 应用权限管理

  • 官方指纹支持

  • Doze电量管理

  • 运行时权限机制->需要动态申请权限

Android 7.0

  • 多窗口模式

  • 支持Java 8语言平台

  • 需要使用FileProvider访问照片

  • 安装apk需要兼容

Android 8.0

  • 通知,渠道->适配

  • 画中画

  • 自动填充

  • 后台限制

  • 自适应桌面图标->适配

  • 隐式广播限制

  • 开启后台Service限制

Android 9.0

  • 利用 Wi-Fi RTT 进行室内定位

  • 刘海屏 API 支持

  • 多摄像头支持和摄像头更新

  • 不允许调用hide api

  • 限制明文流量的网络请求 http

Android 10

  • 暗黑模式

  • 隐私增强(后台能否访问定位)

  • 限制程序访问剪贴板

  • 应用黑盒

  • 权限细分需兼容

  • 后台定位单独权限需兼容

  • 设备唯一标示符需兼容

  • 后台打开Activity 需兼容

  • 非 SDK 接口限制 需兼容

2.热修复原理

原理

  1. 安卓在加载class时会通过双亲委托机制去加载一个类,先让父类去加载,如果找不到再让子类去加载某个类。

  2. 通过查看ClassLoader源码发现findClass方法是由每个子类自己实现的,比如BootClassLoader或者BaseDexClassLoader。而PathClassLoader是继承自BaseDexClassLoader的,它的findClass也是在BaseDexClassLoader里面实现的。

  3. BaseDexClassLoader的findClass里面使用了另一个对象DexPathList去查找对应的class,这是安卓里面特有的实现。在DexPathList对象里面有一个属性dexElements,dexElements是用于存放加载好了的dex数组的,查找class是从这个dexElements数组里面去找的。

…

一句话总结

将修复好的类放在dexElements的最前面,这样在加载类的时候就会被优先加载到而达到修复的目的.

3.MVC,MVP,MVVM

首先需要知道的是为什么要进行技术框架的设计? 肯定是为了低耦合,提高开发效率是吧,所以不要为了设计而设计。

MVC

在Android中View和Controller一般就是被Activity充当了,当逻辑非常多,操作非常复杂时,Activity代码量非常庞大,不易维护。

  • Model : 模型层,业务逻辑+数据存储等

  • View : 用户界面,一般就是xml+Activity

  • Controller : 控制层,一般就是Activity

MVP

我个人角度,现在(2019年10月29日20:02:49)大多是使用这种方式,既不复杂也解耦合了.

  • Model:模型层,业务逻辑+数据存储+网络请求

  • View:视图层,View绘制和用户交互等,一般是Activity

  • Presenter:呈现层,连接V层和M层,完成他们之间的交互

MVVM

为了更加分离M,V层,所以有了MVVM.

  • Model:模型层,业务逻辑+数据存储+网络请求

  • View:视图层,View绘制和用户交互等,一般是Activity

  • ViewModel:其实就是Presenter和View的数据模型的合体.双向绑定,View的变动会反应到ViewModel中,数据的变动也会反应到View上.

4.组件化的好处

  1. 任意修改都需要编译整个工程,效率低下。

  2. 解耦,有利于多人团队协作开发

  3. 功能复用

5.app启动流程

  1. Launcher startActivity

  2. AMS startActivity

  3. Zygote fork进程

  4. Activity main()

  5. ActivityThread 进程loop循环

  6. 开启Activity,开始生命周期回调…

6.Activity启动流程

  1. Activity startActivityForResult

  2. Instrumentation execStartActivity

  3. AMS startActivity

  4. ApplicationThread scheduleLaunchActivity

  5. ActivityThread.H handleMessage -> performLaunchActivity

  6. Activity attach

  7. Instrumentation callActivityOnCreate

7.app体积优化

  • 可以使用lint工具,检测出没有用的文件,同时可以开启资源压缩,自动删除无用的资源。

  • 尽量多使用可绘制对象,某些图像不需要静态图像资源,框架可以在运行时动态绘制图像。尽量自己写Drawable,能不用UI切图就不用,占用空间小。

  • 重用资源。比如一个三角按钮,点击前三角朝上代表收起的意思,点击后三角朝下,代表展开,一般情况下,我们会用两张图来切换,我们其实完全可以用旋转的形式去改变。

…

8.app启动优化

  • 利用提前展示出来的Window,快速展示出来一个节目,给用户快速反馈的体验,障眼法,治标不治本.

  • 避免在启动时做密集沉重的初始化(Heavy app initialization)。

  • 启动时 避免I/O操作,反序列化,网络操作,布局嵌套等耗时操作

9.app布局优化

  • 如果父控件有颜色,也是自己需要的颜色,那么就不必在子控件加背景颜色

  • 如果子控件有背景颜色,并且能完全覆盖父控件,那么父控件不用设置背景颜色

  • 尽量减少不必要的嵌套

  • 能用LinearLayout和FrameLayout,就不要用RelativeLayout,因为RelativeLayout相对比较复杂,测绘也相对耗时.

  • include和merge一起使用,增加复用,减少层级

  • ViewStub按需加载,更加轻便

  • 复杂界面选择ConstraintLayout,可有效减少层级

10.app内存优化

  • 频繁使用字符串拼接用StringBuilder或者StringBuffer

  • ArrayMap、SparseArray替换HashMap

  • 避免内存泄漏

  • 集合类泄漏(集合一直引用着被添加进来的元素对象)

  • 单例/静态变量造成的内存泄漏(生命周期长的持有了生命周期短的引用)

  • 匿名内部类/非静态内部类

  • 资源未关闭造成的内存泄漏

  • 检测内存泄漏的几个工具:LeakCanary,TraceView,Systrace,Android Lint,Memory Monitor+mat

11.内存泄漏有哪些

  • 集合类泄漏(集合一直引用着被添加进来的元素对象)

  • 单例/静态变量造成的内存泄漏(生命周期长的持有了生命周期短的引用)

  • 匿名内部类/非静态内部类

  • 资源未关闭造成的内存泄漏

  • 网络,文件等流忘记关闭

  • 手动注册广播时,退出时忘记unregisterReceiver()

  • Service执行完成后忘记stopSelf()

  • EventBus等观察者模式的框架忘记手动解除注册

12.app线程优化

线程池 避免存在大量的Thread,重用线程池内部的线程,从而避免了线程的创建和销毁带来的性能开销,同时能有效控制线程池的最大并发数,避免大量线程因互相抢占系统资源而导致阻塞线现象发生。推荐阅读 《Android开发艺术探索》 第11章。

分类

  • FixedThreadPool 数量固定的线程池

  • CachedThreadPool 只有非核心线程,数量不定,空闲线程有超时机制,比较适合执行大量耗时较少的任务

  • ScheduledThreadPool 核心线程数量固定,非核心线程没有限制.主要用于执行定时任务和具有固定中周期的重复任务.

  • SingleThreadPool 只有一个核心线程,确保所有的任务在同一个线程顺序执行,统一外界任务到一个线程中,这使得在这些任务之间不需要处理线程同步 的问题. 优点

  • 减少在创建和销毁线程上所花的时间以及系统资源的开销

  • 不使用线程池有可能造成系统创建大量的线程而导致消耗完系统内存以及"过度切换" 注意点

13.Android换肤如何实现,原理

重新设置LayoutInflater的Factory2,从而拦截创建View的过程,然后搞成自己的控件,想怎么换肤就怎么换肤.

14.fresco原理,glide原理,两者区别,哪个更省内存

这块暂时不懂,加入todo

15.DialogFragment 黑边

www.jianshu.com/p/c8044b2c2…

16.Handler原理,Android 消息机制

Handler机制的关键在于对于ThreadLocal原理的理解,线程私有数据,利用ThreadLocal机制将Looper存放到线程内部,perfect !

17.Android 系统架构

应用层,应用框架层,系统运行库层,硬件抽象层和Linux内核层

18.常用布局有哪些

  • FrameLayout,LinearLayout,RelativeLayout,ConstraintLayout,CoordinatorLayout等

19.Android数据存储有几种方式

  • SharedPreferences: 小东西,最终是xml文件中,key-value的形式存储的.

  • 文件

  • 数据库

  • ContentProvider

  • 网络

20.View,SurfaceView

  • View是Android中所有控件的基类

  • View适用于主动更新的情况,而SurfaceView则适用于被动更新的情况,比如频繁刷新界面。

  • View在主线程中对页面进行刷新,而SurfaceView则开启一个子线程来对页面进行刷新。

  • View在绘图时没有实现双缓冲机制,SurfaceView在底层机制中就实现了双缓冲机制。

21.jni调用流程

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

隔壁老李头的系列文章非常棒,地址在这里

22.组件之间相互引用 如何解决

  • 调用其他组件的对外提供的方法:之前看到过一种思路,利用"接口+实现"的方式,定义一个ComponentBase 中间层,然后里面有每个组件对外提供方法调用的Interface,每个组件在初始化的时候就把这些Interface给实现了,然后其他组件需要用的时候就从ComponentBase里面取。

  • 界面跳转:ARouter

23.自定义View 饼状图,点击事件,画文字

这个大家可以跟着hencoder老师的文章系统学习一下.

24.Android 数字签名

校验用户身份,校验数据的完整性

25.fragment用在哪里,与Activity的区别

  • 当Activity需要模块化的时候

  • 不同设备上的适配,比如平台和手机

  • Activity相对Fragment而言,非常笨重,一般小界面小模块用Fragment比较合适.或者首页的tab之类的.

26.RxJava原理

观察者模式,链式

27.EventBus原理

不太了解原理,很少使用,好像也是基于观察者模式的一个框架。

28.View绘制原理

主要是分析measure,layout,draw的过程。

29.Retrofit和OkHttp原理,拦截器

  • Retrofit的话,源码写的非常非常棒.主要是通过动态代理+获取方法上面的注解等,然后组装请求网络的参数,最后用OkHttp去请求网络

  • OkHttp的拦截器链设计得非常巧妙,是典型的责任链模式.并最终由最后一个链处理了网络请求,并拿到结果.

30.点击事件传递机制,事件分为哪几种

事件传递大体过程: Activity--> Window-->DecorView --> View树从上往下,传递过程中谁想拦截就拦截自己处理,MotionEvent是Android中的点击事件。

主要事件类型

  • ACTION_DOWN 手机初次触摸到屏幕事件

  • ACTION_MOVE 手机在屏幕上滑动时触发,会回调多次

  • ACTION_UP 手指离开屏幕时触发

31.anr如何产生,Service触发anr是多长时间(20秒),如何解决anr?如何解决那种莫名其妙的anr?

我觉得anr就是在主线程做了耗时操作,比如io、读写文件、数据库操作等等。 anr发生之后一般会有日志,在/data/anr/traces.txt里面。

2.32 Dialog和Activity是同一个Window?

不是同一个。

  • Activity的attach方法,这里是为Activity实例化了一个PhoneWindow实例

  • Dialog的构造方法里面也是实例化了一个PhoneWindow实例

33.Window,Activity,Dectorview之间的关系

Activity里面实例化了一个Window,Window里面有一个DecorView(根布局)。

34.ConstraintLayout和RelativeLayout在绘制方面有何差别?

todo

35.onClick事件和onTouchListener在哪里回调?

如果一个View需要处理事件,它设置了OnTouchListener,那么OnTouchListener的onTouch方法会被回调。如果onTouch返回false,则onTouchEvent会被调用,反之不会。在onTouchEvent方法中,事件为Action,UP的时候会回调OnClickListener的onClick方法,可见OnClickListener的优先级很低。

36.应用如何保活?

这个确实不怎么了解,主要是不建议保活,提升用户体验,特别是安卓高版本,谷歌是封杀得很严格的,不建议保活。

37.LinearLayout是如何测量(measure)的?如果有weight又是如何测量的?

先做一次测量,做完之后有空间剩余,有weight的View再测量一下,分一下剩余的空间。

android上实现行情图 基于MPChartLib实现定制化分时图和K线图,分时图与bar图连动滚动。左右纵坐标lable定制化显示,横坐标时间定制化显示。 立即下载

相关推荐

Ubuntu升级遇到grub-efi-amd64-signed报错?3步搞定这个烦人的EFI目录问题

本文详细解析了Ubuntu系统升级时遇到的“grub-efi-amd64-signed”报错及“cannot find EFI directory”问题。通过剖析UEFI启动机制与EFI系统分区原理,提供了从诊断到修复的三步解决方案,帮助用户快速解决因EFI目录未挂载导致的升级中断,确保系统引导正常。

assembly8low的博客 585

android开发最新行情,Android版的股票行情K线图开发

现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的资料,所以我特地写了一个demo在此处给大家分享一下。下面是做出来的效果图:背景图是利用canvas先画出一个矩形,然后再画几根虚线,均线图是通过path来绘制的,总之图的绘制是很简单的,我就不在这里作介绍了,大家可以去github下载源码看看。涉及到均线、最高价、最低价、收盘价、开盘价的...

weixin_30128407的博客 290

Qwen-Image LoRA训练实战:从数据准备到异常修复的全流程解析

本文详细解析了Qwen-Image LoRA训练的全流程,从数据准备到参数优化再到异常修复。通过实战案例展示了如何利用LoRA技术微调Qwen-Image模型,提升中文场景下的图像生成质量,特别针对手脚生成异常等问题提供了有效解决方案。文章还分享了中文提示词优化技巧和高级训练方法,帮助开发者高效训练出高质量的LoRA模型。

lemon的博客 967

一步步搞定Android行情K线蜡烛图(带十字光标)

行情K线图也就是我们常说的蜡烛图,是金融类软件里可以说必不可少的,无论日K, 周K,月K,还是分钟K,准确的来表达个股在一定时间内涨跌走势,K线图有着不可无视的作用,其绘制过程也是彰显一个程序员对自定义控件的熟练程度,尤其是对Canvas的灵活运用,绘线,绘边框,及位置的选取,比例的分配,今天这个Demo,则一步步为你诠释。 按惯例,先看下今天要实现的效果,整个Demo地址为:h

知足常乐 5027

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

LSTM 通过独特的门控机制解决了传统 RNN 的梯度消失和梯度爆炸问题,使其在处理长序列时具有显著优势。随着技术的不断发展,LSTM 及其变种(如 Bi-directional LSTM、Stacked LSTM 等)有望在更复杂的任务中发挥重要作用。2. **可视化真实值和预测值**:通过绘图来比较真实值和预测值,判断模型的准确性。2. **输入门(Input gate)**:决定当前的输入信息对细胞状态的影响。1. **细胞状态(Cell state)**:保持信息在时间步之间的传递。

qq_45441438的博客 2055

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4642

Android 开发市场是盛是衰?你应该知晓

…像这种话题的问答或文章什么的,被浏览和评论的数据还是很高,下面我就用随机从网上搜索几条相关的给大家看一下:从图中数据就可以看出关心这类事情的人群还是比较多,经历什么,为什么会这样?其实都是从传言言论开始,15年末的“Android 市场饱和”,17年“Android 凉了”,在到后面的“Android凉凉,互联网寒冬,全部转行”。导致有些,当然不排除某些不为人知的利益关系等。

2401_89790992的博客 742

瑞芯微RK3588平台YOLOv8Pose模型RKNN部署与C++优化实战:从模型转换到高效推理的全流程指南-附源码

错误码 | 原因 | 解决方案 || -1001 | ONNX算子不支持 | 升级RKNN SDK至最新版 || -2003 | 量化校准数据不足 | 增加校准图片至500张 || -3005 | 输入尺寸不匹配 | 固定模型输入尺寸为640x640 || 资源消耗 | CPU 35% | NPU 90% |

m0_64661770的博客 990

Android真的不行了吗?国内行情与技术对比分析

小程序适合轻量级、高频场景,但在复杂性和性能要求上无法替代Android。

2503_90221393的博客 1725

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2165

MIPI C-PHY介绍(Specification for C-PHY V1.2)

本文档描述了一个名为C-PHY的高速串行接口,它在带宽有限(bandwidth limited channels,看的有人说C的含义就是channel limit)的通道上提供高吞吐量性能,用于连接到外设,包括显示器和摄像头。首先0x4fff在0x4000~0x4fff区域,则f=(0,0,0,0,0,0,1),顺序是S6~S1;最后,端到端的传输过程是什么样呢,如下图所示,16bit先转换成7个符号(每个符号3位,共21位),然后并行数据转换成串行数据,输送到符号编码器和3个线的驱动器,接收端流程相反。

qflook的博客 5875

别再问我2024年Android前景如何了,我都回答腻了…

还是那句话,不管那个行业,只要目前存在的都有它存在的前景。一个行业不是一朝一夕就会垮掉的,Android全球第一的终端占有量,Android生态也不会轻易让Android倒下。至少在我们这代人的有生之年是看不到Android消亡的。每个行业都有做得好的也有做得差的,只要你在不断学习不断进步,你就能摘到别人摘不到的果实。说白了,能问Android前景,也说明了你对于自己的技术水平不自信!只有在技术道路上不断的进阶,你才不会再有类似的迷茫!

2401_84132723的博客 1101

[PCIe5.0] 5.3.1.4.2 D3Cold State

主电源(Vcc)完全断开,仅保留极少量辅助电源(Vaux)用于维持基本唤醒功能设备功能完全关闭,所有寄存器状态丢失(除非有特殊存储)需要完全重新初始化才能恢复工作比D3Hot状态功耗更低,但唤醒延迟更长。

系统固件工程师 452

2024年Android最全双非渣本,5年从三流外包到阿里P6,面筋分享!(1),2024年最新华为软件研发面试

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。字节高级Android经典面试题和答案网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!

2401_84519929的博客 633

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

双非渣本,5年从三流外包到阿里P6,面筋分享!

常见的有四种:GET 获取资源,没有body,幂等性POST 增加或者修改资源,有bodyPUT 修改资源,有body,幂等性DELETE 删除资源,幂等性HTTP请求和响应报文的格式,以及常用状态码。

2401_84123026的博客 1024

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

2023年湖南理工学院程序设计竞赛新生赛题解

背景:本硕华五科班,能卷又不能卷,非必要不想卷,比较重视团队氛围offer情况:1.理想汽车,安卓,40*(12-14),base北京但非总部无食堂,部门智能座。秋招java,拿了挺多个offer,不过没有一个大厂的最高的也才23k,没有牛客的大佬们厉害看牛客真的很焦虑,实验室里小伙伴offer最高的也才25k不再想了,弹性工作制 不打卡上班!我之前是亦庄分布的研发公司的优点不拖欠工资,总体算是正常的一家公司管一顿午餐不足:1问清业务线具体做什么,有的岗位就是垃圾脏活2技术栈老的一批3最垃圾的员工福利。

2301_78234743的博客 852

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android视图加载优化——Factory2设置方法

是直接继承于,继续跟踪下的源码,比的功能更加强大。 当我们新建 Activity 的时候,大部分情况是继承 。提供了向后兼容性。本文将深入探索 的 视图加载,探索将 xml 布局文件中的 替换成 的全过程,并由浅入深介绍了Factory2 的一些奇技淫巧,帮助各位Android 开发者简化开发,提高效率。在 Android 中,我们经常在 xml 文件中书写布局。这些文件被打包进 app(因为性能原因由 aapt/2 转换为二进制 xml),并且在运行时由 加载。在 中有两个方法 和 ,文档

嘴巴吃糖了 1172

安卓开发找工作现状,惊呆我了

首先,他用英语问 HR:“你好,我对贵公司很感兴趣,能不能看一下我的简历?HR 又说,你的上升空间很大呀,然后那位求职者回答说:“我是 BOSS。因此,跳槽要慎重考虑。当然,每个人的情况都不同,我们也要根据自己的实际情况进行合理的选择。总结一下,这个例子给我们提供了一个思考的角度,那就是在找工作时一定要有理性的预期,不要过分追求高薪,而要更多地关注职位的发展前景、公司的文化氛围、行业地位等方面。最后,希望大家在找工作时,能够保持积极的心态,不断提升自己的能力和竞争力,相信自己一定能够找到属于自己的好工作。

weixin_47964305的博客 1141

Android-自定义Factory2打造动态换肤(一)

目录需求分析流程方案-自定义Factory2(通过阅读源码得知)创建View的过程代码-实战部分 需求分析 实现APP换肤的功能,要求: 为避免增加apk体积不预先内置资源包仅仅有一个默认的,因此需要实现动态换肤 换肤功能必须实时生效无需用户重启app 无闪烁换肤 字体、状态栏、自定义View、系统View 换肤 Activity、Fragment换肤 流程 方案-自定义Factory2(通过阅读源码得知) 我们可以参考系统创建view的流程,在创建的过程中我们是否可以偷梁换柱呢? 首先我们通过set

吴唐人的博客 2268

移动开发也能年薪30万,方法对了才能避免被淘汰

曾听过很多人说Android学习很简单,做个App就上手了,工作机会多,毕业后也比较容易找工作。这种观点可能是很多Android开发者最开始入行的原因之一。 在工作初期,工作主要是按照业务需求实现App页面的功能,按照设计师的设计稿实现页面的效果。 在实现的过程中,总是会被提如下的需求: 这个字能不能大点或者醒目点儿? 颜感觉颜色和设计稿有差别,能不能再调调? 怎么老是崩溃啊,行不行啊...

shopju的博客 510
上一篇: 《重学安卓》两周年,2021年Android程序员职业规划
下一篇: XML的解析DOM,android模拟器中文输入法
flunsna
博客等级 码龄5年 10粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值