![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 85
码农 小生
分享一些自己的Android开发的经验
展开
-
Kotlin差异化分析,let,run,with,apply及also
作用域函数是Kotlin比较重要的一个特性,共分为以下5种:let、run、with、apply 以及 also,这五个函数的工作方式可以说非常相似,但是我们需要了解的是这5种函数的差异,以便在不同的场景更好的利用它。 读完这篇文章您将了解到:什么是Kotlin的作用域函数?let、run、with、apply 以及 also这5种作用域函数各自的角色定位;5种作用域函数的差异区分;何时何地使用这5种作用域?Kotlin的作用域函数Kotlin 标准库包含几个函数,它们的唯一目的是在对象.原创 2021-06-22 17:10:00 · 369 阅读 · 0 评论 -
再见!深圳!再见!腾讯!
前面几天,和老朋友小A约了一块吃饭,他告诉我他要离开鹅厂了,也要离开深圳了!回来后,诸多心情复杂。于是写下的这篇文章。小A和我一样来自湖南农村,只不过他本科毕业后就来到了深圳。去了深圳知名大厂腾讯做了一名码农,成为了同龄人眼中的佼佼者,让很多同学和朋友无比羡慕,鹅厂哇,BAT光环哇,小A那时春风得意马蹄疾,一日打卡深圳各个知名地点。无忧无虑,深圳以无比包容的双手,让年轻一代的毕业生,在这里展翅飞翔。“来了,就是深圳人”,这个口号贯穿于城市各个地方。蛇口工业区的:时间就是金钱 效率就是生命。激励无数.原创 2021-06-21 17:05:45 · 237 阅读 · 2 评论 -
Android 使用 Kotlin 重写 Gradle 文件
概述众所周知,我们在 Android Studio 是使用 Gradle 来编译的,Gradle 是一种基于 Groovy 语言的构建工具,我们平时看到的 build.gradle 中的语法结构其实就是 Groovy 提供的 DSL 功能。DSL 的全称是领域特定语言(Domain Specific Language),它是编程语言赋予开发者的一种特殊能力,通过它我们可以编写出一些看似脱离其原始语法结构的代码,从而构建出一种专有的语法结构。毫无疑问,Kotlin 是支持 DSL 的,而且 Gradl.转载 2021-06-18 17:20:45 · 615 阅读 · 5 评论 -
发现不一样的Kotlin多方位处理协程的异常
Kotlin 中的协程已经成为在网络请求中比较常用的一种方式,除了正常请求外,我们同样需要处理请求中的异常情况,本篇文章将处理协程中的异常分为以下几个部分:一、try-catch1.1 try-catch基础使用1.2 什么情况下try-catch会无效?1.3 什么是协程的结构化并发?二、CoroutineExceptionHandler2.1 CoroutineExceptionHandler的介绍2.2 CoroutineExceptionHandler的使用2.3 Coroutin.原创 2021-06-15 16:34:23 · 9981 阅读 · 7 评论 -
2021Android核心基础面试题解析
##1、四大组件是什么?**1)Activity:**用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。一个Activity 通常是一个单独的屏幕,Activity 通过 Intent 来进行通信。Android 中会维持一个Activity Stack,当一个新 Activity 创建时,它就会放到栈顶,这个 Activity 就处于运行状态。**2)Service:**服务,运行在手机后台,适合执行不需和用户交互且还需长期运行的任务。**3)ContentProvider:**内容提供者.原创 2021-06-11 21:39:06 · 1391 阅读 · 4 评论 -
鸿蒙OS到底是不是Android套皮?(不多说,看源码!)
人生就像一场旅行,不必在乎目的地。在乎的,是沿途的风景以及看风景的心情。#正文 某人曾说「没有调查就没有发言权」最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵的不可开交。作为十八流码农,本着了解行业动态、体验HarmonyOS开发流程、找出HarmonyOS的特性与不足、看看是否有新的机会,也为了看看吵得不可开交的诸位谁说得对,特地在这个鸿蒙系统马上正式开放升级的时间点,开发体验了一番。HarmonyOS到底怎么实现的——扒.原创 2021-06-10 20:17:59 · 760 阅读 · 7 评论 -
Android优化———内存优化
Java虚拟机Java内存模型虚拟机栈( 线程私有 ):局部变量表、操作数栈、动态链接、方法出口等信息堆( 线程共享 ):实例对象方法区( 线程共享 ):类信息,常量,即时编译器编译后的代码程序计数器( 线程私有 ):字节码行号指示器,记录当前线程执行到多少行本地方法栈( 线程私有 ):和虚拟机栈类似,两者的区别就是虚拟机栈是为虚拟机执行java方法服务,本地方法栈为虚拟机执行native方法服务 。程序计数器线程计数器中如果正在执行java方法,计数器记录的是当前指令的地址,如果是原创 2021-06-10 14:33:28 · 171 阅读 · 3 评论 -
Android 虚拟机与类加载机制
ART 和 DalvikDalvik虚拟机 - Android5.0之前1.Android中的虚拟机是Dalvik/ART2.每个应用程序都对应有一个单独的Dalvik虚拟机实例。3.Dalvik虚拟机实则也算是一个Java虚拟机,只不过它执行的不是class文件,而是dex文件。4.Jvm是的指令集是基于堆栈。Dalvik的指令集是基本寄存器的基于栈的虚拟机 - JVM对于基于栈的虚拟机来说,每一个运行时的线程,都有一个独立的栈。栈中记录了方法调用的历史,每有一次方法调用,栈中便会多一个.原创 2021-06-05 22:18:44 · 244 阅读 · 10 评论 -
HarmonyOS 并不想替代 Android,它的野心比你想象中更大
在宗教艺术中,我们常常能看到一座中途停工的高塔。它被称作「巴别塔」。宗教故事里,巴别塔是人类联合而造,希望能够通向天堂的高塔。但上帝为了阻止人类这一计划,让人类不再说统一的语言,致使相互间无法沟通。因此巴别塔计划只好作罢。语言的隔阂,阻碍了人类的合作。该故事后来也多被寓意语言、沟通的重要性。实际上,智能设备也有自己的语言。比如手机的语言可能是 Android、iOS,电脑的语言可能是 Windows、macOS,电视的语言可能是 tvOS、GoogleTV…… 使用不同「语言」的设备,在联接、协作时原创 2021-06-04 16:45:26 · 775 阅读 · 3 评论 -
鸿蒙能成为世界第三的操作系统吗?
6 月 2 日,鸿蒙又一场发布会如约而至。从诞生之初的「PPT 系统」、「按揭开源」,到源码公布后的「套皮安卓」、「抄袭可耻」,再到如今的立场屁股之争,鸿蒙用两年不到的时间搅动了天下风云。Go 语言之父 Rob Pike 早在 2000 年的时候就说过,“系统软件研究不再有意思了。”而在那个年代,Android、iOS 系统尚未问世,第一支 Symbian 手机也刚上市,没有人能预料到后来的移动操作系统会有沧海桑田般的巨变。关于鸿蒙的技术原理和底层实现,我没有资格过多置喙。对于开源,我的态度向来很明.原创 2021-06-04 14:02:24 · 1321 阅读 · 4 评论 -
Android修炼系列,事件分发从手写一个嵌套滑动框架开始
先放了一张效果图,是一个嵌套滑动的效果。在说代码之前,可以先看下最终的NestedViewGroup XML结构,NestedViewGroup内部包含顶部地图 MapView和滑动布局LinearLayout,而LinearLayout布局的内部即我们常用的滑动控件 RecyclerView,在这里为何还要加层LinearLayout呢?这样做的好处是,我们可以更好的适配不同滑动控件,而不仅仅是将NestedViewGroup与RecyclerView 耦合住。 <com.blog.a.转载 2021-06-01 19:56:09 · 93 阅读 · 0 评论 -
程序员在中年危机到来之前,是该努力提升自己竞争力还是提前谋划另谋出路?
#####最近在网上看到这样一个帖子:本人 26 岁,帝都小 4 年经验移动开发程序员,没有大厂经验,学历也没优势,但是真的很喜欢程序员这个行业。感觉 30 岁之后的职业发展很艰难,想问一下各位,对以后是怎么打算的。对我自己来说纠结的点在于,是趁这几年另谋出路,还是努力提升自己的技术,提高自己的行业竞争力。很焦虑,在帝都安家无望,回十八线小城市,没资源没人脉,没有经商头脑,不知道做什么。老家河北的,所以也不打算去其它互联网相对发达但压力小的城市。如果各位大佬,有什么在十八线小城市养家的门路,希.转载 2021-06-01 13:45:58 · 155 阅读 · 0 评论 -
分享Java进阶-反射机制的详细学习
什么是反射JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为Java的反射机制。java反射机制提供的功能:在运行时判定任意一个对象所属的类在运行时构造任意一个类的对象在运行时判定任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法反射应用场景操作因访问权限限制的属性和方法 如private属性和方法,又如在android开发中.转载 2021-05-31 21:43:01 · 99 阅读 · 1 评论 -
到了40的程序员,都何去何从
什么是反射JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为Java的反射机制。java反射机制提供的功能:在运行时判定任意一个对象所属的类在运行时构造任意一个类的对象在运行时判定任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法反射应用场景操作因访问权限限制的属性和方法 如private属性和方法,又如在android开发中.原创 2021-05-31 13:42:56 · 1483 阅读 · 8 评论 -
Flutter 入门与实战:仿一个微信价值几个亿的页面
网传微信支付页面的第三方链接一个格子需要广告费1一个亿,微信支付页非常适合做功能导航,本篇使用 ListView和 GridView 模仿了微信支付的页面,同时介绍了如何装饰一个组件的背景和边缘样式。左侧是微信支付的界面, 右侧是开发完成后的效果,图标是从 iconfont 上下载的。首先介绍一下本篇涉及到的组件。带装饰效果的 Container实际过程中我们经常会遇到一个容器需要额外的样式,例如圆角,背景色等。在 Flutter 中,对于各种容器都有一个 decoration 的属性,可以用..原创 2021-05-30 21:22:53 · 273 阅读 · 1 评论 -
分享Android KTX + Kotlin协程 组合使用
在android中请求权限,一般使用requestPermissions和onRequestPermissionsResult组合使用来完成。但是这种方式有个很大的弊端,会让代码分割导致代码可读性变差。经测试改方式ktx调用registerForActivityResult只能在activity或者fragment,初始化时调用,不能用在点击的时候触发使用添加依赖 implementation "androidx.activity:activity-ktx:1.2.3" implementation原创 2021-05-28 15:19:28 · 880 阅读 · 11 评论 -
再见!杭州!再见!阿里巴巴
最近和在北京的朋友老冯聊天,老冯说他要离开阿里了,我和老冯是在14年北京租房时认识的,当时老冯招租室友,我加了微信,约看房,后来才知道他也是个程序员,但是因为我那时没啥钱,最后和我另外一些做开发朋友一起合租了。虽然没有一起合租,但是都是程序员,都是一个方向的开发,也经常和老冯一起玩。关于老冯的详细介绍,可以看去年写的这篇文章《在阿里工作几年,女友跑路,晋升无望,买不起房,我活成了一个笑话~》当时我建议老冯跳槽,但是老冯觉得再自己最落魄的时候去市场跳,没有优势,所以想再争取升了P7,然后再...原创 2021-05-27 16:34:57 · 1093 阅读 · 8 评论 -
Android开发之MVVM模式实践:协程与网络请求的结合
前言大家好,我是小益!在经过前两章对协程的介绍后,我们终于又回到了MVVM的封装。协程在Android开发中最常用的场景应该是网络请求了,其次是一些使用Thread的场景,本章内容我们将着重介绍如何将协程与网络请求结合。一、viewModelScope的使用自行创建协程var uiScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)在上述代码中我们创建了一个协程并指定了这个协程是在主线程中工作,之后我们就可以使用前...原创 2021-05-27 15:41:01 · 738 阅读 · 2 评论 -
Kotlin 内联类 inline class请了解一下
最近在做开发的工作中,意外发现了kotlin官方承认的一个内联类的bug。在理解这个bug产生的原因的过程中,我秉承着打破砂锅问到底的决心,竟然顺势学习了一波jvm字节码。收获颇丰,于是便开始着手写下这篇文章和大家分享一下这个学习的过程。这篇文章很长,但是耐心看完,我相信大家肯定会觉得很值。听说inline class很屌事情是这样的。团队的领头大哥上周给我安利了一波kotlin的内联类,说这玩意好用的很,节约内存。于是顺手写了一个sample给我看看。还没了解过内联类(inline class)的原创 2021-05-26 22:05:37 · 244 阅读 · 0 评论 -
Google I/O 公布了 Compose 1.0,你准备好了吗?
Compose 于2019年的 Google IO大会首次发布,当时感觉前景并不乐观,想推翻已存在10年之久的现有视图体系谈何容易,更何况将来与 Flutter 等同门兄弟的关系又该如何相处?没想到时隔仅两年,本届 IO 大会上就宣布 Compose 1.0 即将到来。其实从年初 Beta 版的一系列造势活动就能看出 Google 在 Compose 推广上的决心之大,只要官方发力编程语言都可以短期内切换,更何况一个UI框架? 所以不必怀疑, Compose 必将成为新的UI开发标准。随着稳定版的到原创 2021-05-25 22:28:07 · 545 阅读 · 0 评论 -
UI组件化--干掉shape终极一战
背景UI组件化对项目有正向收益,不仅能提效,还能保证高度的视觉还原度,减少和UI设计师沟通成本,所以也得到了大家的认可。所以每个项目都会启动UI组件化建设,但是UI视图是和项目强相关的,项目间无法复用,导致大家疲于实现,重复造轮子,拖延下班时间,那么基于上面的背景,有没有更好的解决方案呢,答案是有的,下面介绍一下UI组件化在项目中的实施经验,下面分为目标、工程架构、组件架构、组件实现来展开。目标对现有UI组件化进行容器化抽象,底层UI组件提供最大功能集合,完全解耦业务逻辑,业务方根据自己需求原创 2021-05-25 14:48:22 · 239 阅读 · 0 评论 -
Android 兼容 Java 8 语法特性的原理分析
本文主要阐述了Lambda表达式及其底层实现(invokedynamic指令)的原理、Android第三方插件RetroLambda对其的支持过程、Android官方最新的dex编译器D8对其的编译支持。通过对这三个方面的跟踪分析,以Java 8的代表性特性——Lambda表达式为着眼点,将Android如何兼容Java8的过程分享给大家。Java 8概述Java 8是Java开发语言非常重要的一个版本。Oracle从2014年3月18日发布Java 8,从该版本起,Java开始支持..原创 2021-05-24 21:22:54 · 230 阅读 · 0 评论 -
你听说过关于互联网圈子的四大谎言吗?
你听说过关于互联网圈子的四大谎言吗? 近日,有网友发帖爆出这所谓的“四大谎言”,分别是:去阿里镀金,去字节赚钱,去金山养老,去腾讯学技术。这本是四句传言,大概其本意是:去老牌大厂阿里工作相当于给自己的简历镀一层金,去业务蒸蒸日上的新兴大厂字节工作收入更高,去节奏慢、相对稳定的金山工作相当于养老,去腾讯工作可以学到更先进更牛的技术。听起来挺有道理,怎么就成了谎言呢?来听听程序员们怎么说吧!先来看第一句,“去阿里镀金”,阿里员工表示这句不算谎言,确实能镀金。问题...原创 2021-05-24 16:52:07 · 543 阅读 · 0 评论 -
从大公司年薪30万,跳槽到小公司月薪8千,是什么体验?
基本每隔一段时间,我都会收到一类问题:去大公司好,还是去小公司好?我之前文章中聊过一位朋友,35岁时,从大公司年薪30万的技术总监,跳槽到同学的创业小公司,拿着8千块月薪,主要收入是业绩奖金和年底分红。原先他管理的团队负责几个老系统的维护,几年了都差不多,直到业务量缩水时才下定决心跳出圈子。有读者评论说:早跳到小公司不就好了?大公司到最后都是养老,价值越做越低。近几年市面上有一种观点很流行,大概是:大公司会毁掉你。然后列举种种弊病,包括晋升通道僵化且狭窄、“螺丝钉化”、层级过多、人浮原创 2021-05-24 14:16:57 · 160 阅读 · 0 评论 -
FFmpeg代码架构
FFmpeg模块分类打开FFmpeg源码,会发现有一系列libavxxx的模块,这些模块很好地划分了代码的结构和分工。libavformat,format,格式封装libavcodec,codec,编码、解码libavutil,util,通用音视频工具,像素、IO、时间等工具libavfilter,filter,过滤器,可以用作音视频特效处理libavdevice,device,设备(摄像头、拾音器)libswscale,scale,视频图像缩放,像素格式互换libavresample原创 2021-05-23 20:53:46 · 165 阅读 · 0 评论 -
Android 目前最稳定和高效的UI适配方案
Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解。刚好,近期准备对糗事百科Android客户端设计一套UI尺寸适配方案,可以和小伙伴们详细的聊一聊这个问题。Android适配最核心的问题有两个,其一,就是适配的效率,即把设计图转化为App界面的过程是否高效,其二如何保证实现UI界面在不同尺寸和分辨率的手机中UI的一致性。这两个问题都很重要,一个是保证我们开发的高效,一个是保证我们适配的成效;今天我们就这两原创 2021-05-22 20:20:06 · 168 阅读 · 0 评论 -
音视频交叉编译动态库、静态库的学习
#前言该篇文章主要介绍 Android 端利用 NDK 工具库来对 C/C++ 进行交叉编译,并通过 makefile 和 cmake 来构建 Android 项目。#编译器了解 c/c++ 编译器的基本使用,能够在后续移植第三方框架进行交叉编译时,清楚的了解应该传递什么参数。1. clangclang 是一个C、C++、Object-C的轻量级编译器。基于LLVM( LLVM是以C++编写而成的构架编译器的框架系统,可以说是一个用于开发编译器相关的库),对比 gcc,它具有编译速度更快、编译产原创 2021-05-21 21:48:46 · 369 阅读 · 1 评论 -
Android开发中单例模式四种实现方式详解
为何用单例模式以及应用场景整个程序的运行中只允许有一个类的实例;需要频繁实例化然后销毁的对象。创建对象时耗时过多或者耗资源过多,但又经常用到的对象。方便资源相互通信的环境,封装一些常用的工具类,保证整个应用常用的数据统一保存一些共享数据在内存中,其他类随时可以读取。资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置控制资源的情况下,方便资源之间的互相通信。如线程池等。为什么用单例大家都清楚了 废话不说,直接上代码,盘它就完了!!!!一.饿汉式p.原创 2021-05-21 20:11:58 · 213 阅读 · 0 评论