编程之家(jb51.cc)移动开发栏目主要收集最新编程资料,例如:iOS开发教程、Android开发教程、Swift教程、Hybrid教程、Cocos2d-x教程等。
前言面试大厂,那就是考察你技术方向的一些专业技能,如果你面试Android岗位,那 Android 方向的专业技能就是考察很重要的一个方向。但是话说回来,即便这条是所有人都知道的共识,也不是所有人都能搞得定。有些人就是觉得自己基础不好,然后就知难而退,要么就是没有决心啃下这块硬骨头,这时候就体现出每个人面对困难的方式了。再退一步讲,即便你不想加入大厂,在IT 领域,如果你想吃技术这碗饭,长久来看,专业技能也会制约一个人的上限,等到工作时间越长,年龄越来越大,专业技能的熟练程度就会让你和别的程序员之间差
作者:xuyisheng构建个性化的UI是非常酷的。你的应用程序不需要对每个人都是一样的。一个轻松定制你的应用程序的方法是,从客户资料/封面照片中提取调色板。它是这样做的。首先,我们从一个网址上加载图片到byte list中。imageBytes = (await NetworkAssetBundle(Uri.parse(photo)).load(photo)) .buffer .asUint8List();然后,我们导入Image lib,这样我们就可以访问每个像素.
前言为了让读者可以对Android系统进行“有血有肉”的感知,而不是停留在抽象的原理和概念之上,本书对Android 的代码进行了分析,进而“提炼”出 Android 的全貌。又因为Android有着海量代码,故只分析了Android系统的一些主要模块和类,不对各个细节进行全面分析,这样可以在有限的篇幅中让读者了解Android的内部结构和运行机制,同时避免让读者陷入海量代码的云雾中而不得要领。目录因为笔记的内容实在太多,下面就以截图展示部分内容了。有想获取完整版笔记的小伙
作者:程序员江同学前言去年曾经写过一篇文章调研Compose的性能:相比 XML , Compose 性能到底怎么样?不过这篇文章主要是从包体积,页面首次打开时间来分析Compose的性能,而Compose作为一个UI框架,相信大家更关注它的渲染性能比如FPS,本文主要就是从FPS的角度来分析Compose的性能本文主要包括以下内容:如何测量Compose的FPSCompose列表渲染性能分析Compose粒子动画渲染性能分析如何测量Compose的FPS所谓FPS也就是每秒显示的.
作者:Jkwen2022DialogFragment 是一种弹窗实现方式,其本质是 Fragment。//它的类定义表明,它继承自Fragment,并且拥有Dialog的cancel和dismiss行为public class DialogFragment extends Fragment implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener 因为在 DialogFragme.
选择方案的选择单线程更新UI多线程更新UI从问题本身考虑就两个方案不是单线程就是多线程。下面是个人根据具体情况分析,如果有什么不对的地方,欢迎指正。从开发效率来看,开发一个 单线程UI 库,会显得非常容易,而且,每个控件的运行效率肯定会比多线程的效率高,比如我们单线程可以使用HashMap,多线程就需要使用JUC 框架下的类库了,这个效率肯定比 HashMap低很多,这样就很好理解。编写一个多线程的UI库,很可能每个控件,都会加锁,控件本身效率就低了,但是这样还不够 ,后面会解释。还有一
概述最近在写公司项目需求,有一个流式布局FlowLayout需要进行修改,这个一般用于显示标签信息,看了一下之前的代码,感觉可拓展性太差,要实现这次的效果,有点麻烦,索性自己打造一个流式布局,这次决定像ListView,RecycleView一样,采用Adapter设计模式进行实现,这样具体对某个子View进行修改的话,可以直接在Adapter中进行修改。效果分析1.继承自谁?我们可以看到内部包含许多View,因此这是一个自定义ViewGroup2.测量 onMeasure(),这里我们需要知道
作者:奔波儿灞取经卡顿的来源通过屏幕渲染机制我们知道:Android的屏幕渲染是通过vsync实现的,软件层将数据计算好后,放入缓冲区,硬件层再从缓冲区将数据读出来绘制到屏幕上,其中渲染周期是16ms,这样我们就看到了不断变化的画面。如果超过了16ms,就会发生卡顿,当然这个卡顿肯定是软件层的(如果发生在硬件层,换设备就行了)。那么,软件层的计算时间就需要小于16ms了,那么这个计算是在哪里执行的呢?就在Handler中,准确点说,是在UI的Handler中。Android进程间的交互是通过.
作者:长安皈故里1.ViewModel构造函数支持传入Application自定义一个ViewModel继承AndroidViewModel:class ApplicationViewModel(app: Application) : AndroidViewModel(app) { //获取Applicaction private val mApp: Application by lazy { getApplication() }}我们就可以在通过ge.
作者:leobert-lan前言各位亲爱的读者朋友,我正在创作 Java多线程系列 文章,严格的说,JVM内存模型的知识并不隶属于Java多线程范畴,但在讨论多线程的过程中,会涉及到相关概念,考虑到它作为 面经常客,故单独成篇进行知识梳理。在各种有意无意地渲染之下,环境中已经充斥着焦虑,我并不认为正经面试真的有必要考察这些,毕竟没有几个岗位是开发JVM的。本篇文章将尽最大努力做到容易记忆,帮助各位克服焦虑!在本篇中,将JVM内存模型以及JVM线程模型的关键知识,形成凝练的图、辅以文字,同读者一起.
Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上面构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作。在全世界,Flutter 正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。最近,Flutter 官方发布了2021年第二季度的用户调研结果,共有七千多个开发者参与调研。结果显示,在Flutter发布的3年后,开发者依然对 Flutter 的满意度高达 92%。可见其依旧火热。这里把学习过程中一些常用高频的东西总结出来,
作者:AndroidPub前言现在的 Android 项目中几乎少不了对 LiveData 的使用。MVP 时代我们需要定义各种 IXXXView 实现与 Presenter 的通信,而现在已经很少见到类似的接口定义了,大家早已习惯了用响应式的思想设计表现层与逻辑层之间的通信,这少不了 LiveData 的功劳, 因为它够简单好用。但如果将它用在 Domain 甚至 Data 层中就不合适了,但是现实中确实有不少人会这么用。1. 为什么有人在 Repository 中使用 LiveData ?当.
作者:TechMerger转载地址:https://juejin.cn/post/6956237862815662088针对Backup功能的前作足足三万字,立足点比较大,本篇将针对实战环节单独解读。手机等智能设备是现代生活中的重要角色,我们会在这些智能设备上做登录账户,设置偏好,拍摄照片,保存联系人等日常操作。这些数据耗费了我们很多时间和精力,对我们而言极为重要。如果我们的设备换代了或者重新安装了某个应用,之前使用的数据如果能自动保留,那将是非常出色的用户体验。而保留数据的第一步则在于Ba.
前言从历史来看,2G打开了了移动互联网天下,3G带来了即时通信,诞生了QQ 微信等巨头,4G 带来了短视频兴起。字节跳动等公司崛起。2 3 4G的出现促成了移动互联网10年繁荣。而5G的出现,也会促成至少10年音视频行业的繁荣。所以,做音视频研发的前景是广阔的,对于很早看出音视频前景的同学来说,已经开始通过各种渠道搜集相关的学习资料,及早的投入音视频研发的队伍。作为Android开发者的我们到底应不应该上音视频这条船?接下来一起分析下。行业现状核心竞争力:定义音视频是程序届的皇冠,掌握
一、概述为什么需要ViewModel或者说ViewModel的优势是什么?如果Activity或者Fragment销毁或者重建,存储在其中的数据会丢失,对于简单的数据比如Activity可以使用onSaveInstanceState()方法来从onCreate()中恢复数据,但这个方法只适合可以序列化再反序列化的少量数据,而不适合较大的数据。另外一个问题是,界面经常需要异步操作,比如网络请求等,当界面销毁时,往往需要手动维护异步取消的动作,这无疑显得特别繁琐。并且把所有代码都写在界面中,会变得特别臃肿
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。这里会不断收集和更新Android基础相关的面试题,目前已收集100题。1.Android系统的架构应用程序Android会同一系列核心应用程序包一起发布,该应用程序包包括Email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。应用程序框架开发人员可以完全访问核心应用程序所使用的API框架(
作者:程序员江同学前言谈到Android的UI绘制,大家可能会想到onMeasure、onLayout、onDraw三大流程。但我们的View到底是如何一步一步显示到屏幕上的?onDraw之后到View显示到屏幕上,具体又做了哪些工作?带着这些问题,我们今天就深入学习一下Android渲染的流程吧,本文主包括以下内容:Android渲染的整体架构是怎样的?Android渲染的生产者包括哪些?Skia与OpenGl的区别是什么?什么是硬件加速?硬件绘制与软件绘制的区别Android渲染缓冲.
作者:躬行之了解了音视频的相关知识,可以先阅读同系列文章:音视频开发基础知识音频帧、视频帧及其同步Camera2、MediaCodec录制mp4MediaCodec 是 Android 中的编解码器组件,用来访问底层提供的编解码器,通常与 MediaExtractor、MediaSync、MediaMuxer、MediaCrypto、MediaDrm、Image、Surface 和 AudioTrack 一起使用,MediaCodec 几乎是 Android 播放器硬解码的标配,但是具体使.
作者:HenAndroid本篇文章我就来扒一扒Android 进程间的通信-Binder 机制。我们都知道Android 是基于Linux系统来实现的,因此,我们有必要来了解一下,为什么Android 不使用Linux本身有的进程通信机制,而是要自己撸一个Binder 这玩意来实现进程间通信。 接下来,我们简要的介绍下Linux 进程间通信的几种方式。介绍Linux IPC机制,旨在了解其思想,得出其优缺点,便于找到Android中使用Binder 的依据,故不做深入的分析,如果想要深入分析,可以.
Android系统提供了四个层面的音频API:Java层MediaRecorder&MediaPlayer系列; Java层AudioTrack&AudioRecorder系列; Jni层opensles; JNI层AAudio(Android O引入)下面分别介绍这些API的使用及特点。1. MediaRecorder&MediaPlayerMediaRecorder与MediaPlayer并不能算完整意义的音频API,它们只是系统音频API的封装,除了采集/播
作者:JulyYu前言使用MediaPlayer播放能力后再视频播放上还有一个问题需要解决,那就是适配尺寸适配。默认情况使用SurfaceView播放视频可能会出现视频被拉伸或是压缩的情况。MediaPlayer内部方案视频资源信息如下所示,视频尺寸为1080x606,正常播放情况是宽大于高展示。MediaPlayer内部支持视频播放尺寸设置:VIDEO_SCALING_MODE_SCALE_TO_FIT和 VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROP.
作者:唐子玄引子MVI 是Model-View-Intent的简称,它们分别表示。。。。。我并不打算逐个字母介绍它们代表的意思。因为这样一点也不能增进对 MVI 的理解,反而会对它的认识蒙上厚厚的一层迷雾。奥古斯都在《忏悔录》里面问我这样一个问题:“时间到底是什么?你不问我的时候,我是知道的;你一问我,我就不知道了。”把“时间”换成“MVI”,这个问题同样困扰着我:“MVI 到底是什么?你不问我的时候,我是知道的;你一问我,我就不知道了。”维特根斯坦会说,上面是一个非法的问题,源于错误地使.
activity的几种启动模式是android中常考的知识点,一般会考察有哪几种启动模式,以及每种启动模式在什么场景下使用::这个是android默认的Activity启动模式,每启动一个Activity都会被实例化一个Activity,并且新创建的Activity在堆栈中会在栈顶。:如果当前要启动的Activity就是在栈顶的位置,那么此时就会复用该Activity,并且不会重走onCreate方法,会直接它的方法,如果不在栈顶,就跟一样的。如果当前activity已经在前台显示着,突然来了一条推送消息,
对于开发者来说,Android的Java 层 提供了两种开发者可直接调用的 Method Trace 的API,一是 android.os.Debug类中的 startMethodTracing相关API,第二个 是android.os.Trace 类中的beginSection相关AP。 这两者的区别是 Debug类只能监控 Java函数调用, 而Trace类底层是使用 atrace 实现,其追踪的函数会包含了应用及系统的Java 和Native函数,并且底层基于ftrace还可以追踪cpu的详细活动信息
一般Android面试分为两部分:Java部分和Android部分,下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。文末有福利送给大家1)JAVA基础下面列一两个遇到的题吧类似这种的题很多,考察的都是基础知识的牢固性。所以需要自己多巩固基础。2)数据结构和算法常见的数据结构就是:数组,栈,队列,集合,映射,链表,堆,二分搜索树,红黑树。当然还有其他的一些,比如AVL平衡树等一些数据结构。我们要做的就是了解它们的实现原理和各自的优缺点。数据结构部分面试遇到最多的就是:算法算法其实就是我们平时常
作者:HyejeanMOON转载地址:https://juejin.cn/post/7098975953199726606因为在iOS14中推出的小组件的功能,让大家重新开始关注起小组件了。虽然安卓是很久之前就有了小组件的功能,但是因为它的不美观和不实用,以及对开发者也不够友好,逐渐变成为废弃的状态。直到Android12,再一次更新了小组件的的相关功能,并且为了减少开发者的负担而推出了Jetpack Glance库。该库是基于Compose,是开发者利用Compose的命令快速上手进而减少开发成.
作者:字节跳动技术团队转载地址:https://juejin.cn/post/7078249602410889247文章标题很随意,些微有一些骗点击的“贼意”;但内容却是充满了诚意,想必你已经感受到了。这是一次源于头条 Android 客户端软件架构问题的探讨,之所以冠上“嘴炮”之名,是因为它有一些务虚;同时又夹杂了一些方法论,不仅适用于客户端软件架构,也适用于其他工作场景,希望对大家有所帮助。为了拉满读者的带入感,且以“我们”为主语,来看架构的挑战、判断和打法。我们的挑战期望高优秀的公司.
路只有一条:Read the fcking source code。翻译过来读源码,不论是看书,看博客,你的最终目的只有一个「学会看源码」,而不是「学会源码」。关于如何阅读源码,这不是一个简单的问题,我有几点经验 给大家分享:看不懂的多读。上面已经说过了,没有人一学就会;特别是对于初学者,你刚看系统源码,肯定一头雾水;万事开头难,在你觉得艰深晦涩的时候,你就当在背课文;Android Framework的代码时遵循一定规范的,你在背了一篇课文之后,再去读别的课文,读到一半的时候就算你看不懂,很有可能你就会
说起来,在不知不觉中,我竟然凑成了这沉浸式状态栏三部曲。其实最开始的时候,我主要是因为工作上的原因想要在Android版的Edge浏览器上实现首页图片沉浸式的功能。那么为了实现这个功能,我提前去做了一些技术调研,并将调研的结果整理成了一篇文章,具体可参阅 再学一遍android:fitsSystemWindows属性 。做完技术调研之后,接下来就是功能实现了。对于Android版的Edge浏览器而言,首页图片的沉浸式一直是部分网友长久以来的呼声,经过我的各种攻坚和踩坑之后,终于将这个功能完成了。具体可参阅
作者:newki转载地址:https://juejin.cn/post/7098915987311263781对于整个Android开发来说,整体的开发架构离不开三化这个名词:模块化,组件化,插件化。下面一起来看看它们是如何一步一步演变成今天的模样。一. 模块化软件开发不管是哪一个方向,大家都知道高内聚,低耦合的思想。模块化也是每一门语言,各个方向的开发者都会处理的问题。在Android开发方向来说,模块化就是把常用的UI,网络请求,DB操作,第三方服务等公共的部分抽取封装成模块,方便复用。.