自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android

希望有天成功在望

  • 博客(225)
  • 资源 (1)
  • 收藏
  • 关注

转载 IntentService

IntentService是一种特殊的Service,它继承了Service并且它是一个抽象类,因此必须创建它的子类才能使用IntentService。客户端startService发送请求,IntentService就被启动,然后会在一个工作线程中处理传递过来的Intent,当任务结束后就会自动停止服务。IntentService是自己维护了一个线程,来执行耗时的操作,然后里面封装了HandlerThread,能够方便在子线程创建Handler。

2023-05-11 16:02:21 247

转载 Android匿名共享内存(Ashmem)原理

在Android系统中,APP端View视图的数据是如何传递SurfaceFlinger服务的呢?View绘制的数据最终是按照一帧一帧显示到屏幕的,而每一帧都会占用一定的存储空间,在APP端执行draw的时候,数据很明显是要绘制到APP的进程空间,但是视图窗口要经过SurfaceFlinger图层混排才会生成最终的帧,而SurfaceFlinger又运行在另一个独立的服务进程,那么View视图的数据是如何在两个进程间传递的呢,普通的Binder通信肯定不行,因为Binder不太适合这种数据量较大的通信,那么

2020-12-31 16:37:56 859

转载 Android面试题思考与解答

Android面试题思考与解答https://mp.weixin.qq.com/s/rn4w4bqIdQ-mksfiSk9BMA

2020-12-31 15:44:27 274

转载 Android面试复盘

简历书写强烈建议,把自己的强项,亮点加粗注明放在简历前面,大家都很忙,也很烦躁,让人一眼就看到优点,对双方都友好。因为我对安卓性能优化方面感兴趣,平时工作也花了很多时间在这里,所以我会在简历上突出说明,我做了内存优化,熟练掌握使用xxx,内存性能提升xxx。(因为这里的内容是可控的,如果面试官对你感兴趣,这里的回答你也是能提早准备好的)项目经历如何写?建议按照是什么,做了啥,有啥数据指标佐证的方式去写。比如,我做了xx项目,负责xx模块,使用了xxx框架,可配合xx做xxx,效率提高xx

2020-12-31 15:42:49 453

转载 Retrofit源码解析

Retrofit源码解析https://www.kancloud.cn/smartsean/android/1543907

2020-12-31 14:40:16 129

原创 Glide相关

一、Gilde的使用方法:Glide.with(content) .load(url) .into(imageView);with绑定生命周期,load指定加载资源,into指明加载目标。二、生命周期绑定with()方法的重载种类非常多,既可以传入Activity,也可以传入Fragment或者是Context,实际上只有两种情况而已,即传入Application类型的参数,和传入非Application类型的参数。 Application:自动就是和应用程序的生命周期是同步的。

2020-12-30 16:45:31 297

原创 Android数据库比较

一:OrmLite简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善缺点:1.基于反射,效率较低二:GreenDao优点:库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制; 性能最大化(官方词汇); API 非常易用,提升了开发效率; 最小的内存开销; 可支持原生语句,从Android原生SQLite过度到GreenDao相对还是比较容易; 数据表结构和Entity数据结构convert支持,Entity的不同数据结构和数据库存储结构之间做...

2020-12-30 14:21:20 940

转载 优化网络编程

对于网络编程,你做过哪些优化?https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1887总结1.DNS 解析优化,分安全性和速度提升两方面。安全性:HttpDns速度性:IP 直连方式、DNS 解析超时2.网络请求数据缓存,对于请求返回的数据需要缓存到本地数据库中。实际上,在某些场景中对于请求对象 Request 自身也需要做缓存操作。比如“发送埋点”的请求,这样请求失败就将其保存到本地数据

2020-12-29 19:23:24 167

转载 UI 卡顿优化

面对 UI 卡顿,如何入手分析解决问题?https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1881Choreographer小结Choreographer 是一个承上启下的角色。承上:接收应用层的各种 callback 输入,包括 input、animation、traversal 绘制。但是这些 callback 并不会被立即执行。而是会缓存在 Choreographer 中的 Callback

2020-12-29 18:14:02 194

转载 内存泄漏优化

面对内存泄漏,如何进行优化?https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1880总结:Activity 内存泄漏预防将 Activity 单独做预防,是因为 Activity 承担了与用户交互的职责,因此内部需要持有大量的资源引用以及与系统交互的 Context,这会导致一个 Activity 对象的 retained size 特别大。造成 Activity 内存泄漏的场景主要有以下几种

2020-12-29 17:07:36 197

转载 Android 崩溃处理

Android 崩溃的那些事儿转载:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1879总结:如果要给 crash 日志进行分类,可以分成 2 大类:JVM 异常(Exception)堆栈信息、native 代码崩溃日志。JVM 异常堆栈信息Java 中异常(Exception)分两种:检查异常 checked Exception 和非检查异常 unchecked Exception。.

2020-12-29 15:15:05 374

转载 APK包体积优化

APK 如何做到包体积优化?https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1878总结:安装包监控:Android Studio 的 APK Analyser:这是 Android Studio 提供的一个 APK 检测工具,通过它可以查看一个 APK 文件内部各项内容所占的大小,并且按照大小排序显示。APK Analyzer 的使用非常简单,只要将需要分析的 APK 文件拖入 Andr

2020-12-28 22:31:49 208

转载 OKHttp详解

OkHttp 是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。对于 Android App 来说,OkHttp 现在几乎已经占据了所有的网络请求操作,RetroFit + OkHttp 实现网络请求似乎成了一种标配。因此它也是每一个 Android 开发工程师的必备技能,了解其内部实现原理可以更好地进行功能扩展、封装以及优化。网络请求流程分析先看下 OkHttp 的基本使用:除了直接 new OkHttpClien

2020-12-28 17:45:22 75471

原创 面试题目总结(一)

1.java有什么特性,继承有什么用处,多态有什么用处?Java的四大特性分别是封装,继承,多态与抽象。封装的概念:把对象的属性和方法结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口。封装的好处:(1) 隐藏实现细节 (2)安全性 (3)增加代码的复用性 (4)模块化继承的概念:从已知的一个类中派生出新的一个类,叫子类。子类实现了父类所有非私有化属性和方法,并能根据自己的实际需求扩展出新的行为。继承的好处:(1):继承是传递的,容易在其基础上构造,建立和扩充出新的类.

2020-12-28 16:50:30 173 1

转载 OutOfMemoryError 可以被 try catch 吗 ?

OutOfMemoryError 可以被 try catch 吗?注意看下面的 Gif,每点击一次 Allocate 20MB ,都会给数组容量增加 20*1024*1024,当然应该并不是 20 MB。如下面代码所示:binding.allocate.setOnClickListener{try{bytes=ByteArray(bytes.size+1024*1024*20)refreshMemory()}catch(e:OutOfMemoryErr...

2020-12-28 16:50:14 2115

原创 RecyclerView详解

RecyclerView 简称 RV, 是作为 ListView 和 GridView 的加强版出现的,目的是在有限的屏幕之上展示大量的内容,因此 RecyclerView 的复用机制的实现是它的一个核心部分。RV 常规使用方式如下:解释说明。setLayoutManager:必选项,设置 RV 的布局管理器,决定 RV 的显示风格。常用的有线性布局管理器(LinearLayoutManager)、网格布局管理器(GridLayoutManager)、瀑布流布局管理器(StaggeredGr

2020-12-28 16:49:58 39625 1

原创 Java内存区域划分

Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。下面描述了一个java 文件被 JVM 加载到内存中的过程:1. HelloWorld.java 文件首先需要经过编译器编译,生成 HelloWorld.class 字节码文件。2. Java 程序中访问HelloWorld这个类时,需要通过 ...

2020-12-28 16:49:17 134

转载 String、StringBuffer与StringBuilder之间区别

一、Java String 类——String字符串常量 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC ...

2020-12-28 13:28:14 124

转载 RecyclerView的缓存机制

Android深入理解RecyclerView的缓存机制https://www.jianshu.com/p/e1b257484961RecyclerView 高级面试题 | 滚动时表项是如何被填充或回收的?https://www.jianshu.com/p/897ee5e3d13e

2020-12-27 22:58:54 194

转载 线程创建的三种方式及区别

创建方式继承Thread类  (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。  (2)创建Thread子类的实例,即创建了线程对象。  (3)调用线程对象的start()方法来启动该线程。package Thread;import java.util.concurrent.*;public class TestThread { public static void main(St..

2020-12-25 18:20:53 244

转载 数据库三问—快手真题

数据库是每个程序员都必须要掌握的知识结构,Android中也同样如此,今天的三问就是关于数据库的: 索引是什么,优缺点 事务四大特性 讲讲几个范式 索引是什么,优缺点数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树)优点 通过创建索引,可以在查询的过程中,提高系统的性能 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性 在使用分

2020-12-25 18:14:40 243

转载 网络相关问题

网络问题算是每个程序员的必修课,所以网络基础问的也是特别多,尤其是大前端行业。今天的面试三问是: 网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议? 具体介绍下TCP/IP TCP的三次握手和四次挥手,为什么不是两次握手?为什么挥手多一次呢? 网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议?1)过程分析:主要分为三步 DNS解析。用户输入url后,需要通过DNS解析找到域名对应的ip地址,有了ip地址才能找到服务器端。首先会查找浏览器

2020-12-25 14:23:25 259

转载 类的初始化与实例化知识点

前言之前说了类加载的过程,但是有的读者表示还是有些面试题还是答不来,所以今天就来总结下类加载、对象实例化方面的知识点/面试题,帮助大家加深印象。全是干货,一网打尽类的基础知识!先看看下面的问题都能回答上来吗? 描述new一个对象的过程,并结合例子说明。 类初始化的触发时机。 多线程进行类的初始化会出问题吗? 类的实例化触发时机。 <clinit>()方法和<init>()方法区别。 在类都没有初始化完毕之前,能直接进行实

2020-12-25 11:35:59 619

转载 Handler内存泄露全面分析

前言Handler内存泄露的原因是什么?你会怎么答呢?这是错误的回答"内部类持有了外部类的引用,也就是Hanlder持有了Activity的引用,从而导致无法被回收呗。"其实这样回答是错误的,或者说没回答到点子上。内存泄漏Java虚拟机中使用可达性分析的算法来决定对象是否可以被回收。即通过GCRoot对象(虚拟机栈中的引用的对象、方法区中的类静态属性引用的对象、方法区中的常量引用的对象、本地方法栈中JNI的引用的对象)为起始点,向下搜索走过的路径(引用链),如果发现某个对象或者对

2020-12-24 19:03:06 350 1

转载 数组中的第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。有两种解决思路,一种是最小堆,一种是快排最小堆它是一颗完全二叉树,它可以是空 树中结点的值总是不大于或者不小于其孩子结点的值 每一.

2020-12-24 17:46:30 203 1

转载 线程池回收工作线程

下面以JDK1.8为例进行分析1.runWorker(Worker w)工作线程启动后,就进入runWorker(Worker w)方法。里面是一个while循环,循环判断任务是否为空,若不为空,执行任务;若取不到任务,或发生异常,退出循环,执行processWorkerExit(w, completedAbruptly); 在这个方法里把工作线程移除掉。取任务的来源有两个,一个是firstTask,这个是工作线程第一次跑的时候执行的任务,最多只能执行一次,后面得从getTask()方法里.

2020-12-23 17:51:02 269

转载 EventBus原理

EventBus相信大部分Androider都很熟悉,虽然现在谷歌官方出了JetPack来替代,但EventBus的一些设计思路还是值得借鉴的。下面就以阿里面试中我手写的一个EventBus案例为例;其实EventBus原理并不难,就是维护了几个数组,然后根据对应的key找到对应的注册对象,通过放射的方式调用对应的方法。EventBus3.0之前和之后有比较大的区别,最大的差别在于3.0之后通过apt再编译期间生成一个引用对象,这样做很大程度上提高了性能。最简单的使用//注册事件Even

2020-12-23 16:02:05 572

转载 Bitmap知识点集合

前言今天聊聊Bitmap相关的面试题/知识点,看看你是否都弄明白了呢? Bitmap是什么,怎么存储图片? Bitmap内存如何计算? Bitmap内存 和drawable目录的关系。 Bitmap加载优化?不改变图片质量的情况下怎么优化? inJustDecodeBounds是什么? Bitmap内存复用怎么实现? 高清大图加载该怎么处理? 如何跨进程传递大图? Bitmap是什么,怎么存储图片。Bitmap,位图,本

2020-12-23 15:26:26 364

转载 RxJava本质与问题

经历这么多版本,RxJava本质上不变的是什么?https://mp.weixin.qq.com/s/F8oApgGM7OY9KxxB2RMt0QRxJava 这8问,你顶得住吗?https://mp.weixin.qq.com/s/wuUNPyrZRl43rjJN8l27JA

2020-12-23 15:22:13 133

转载 TCP 协议面试问题

https://mp.weixin.qq.com/s/iiDnHhpi-fG03VTQKYjwrA

2020-12-23 15:19:18 109

转载 Android面试题

1.说说View/ViewGroup的绘制流程View的绘制流程是从ViewRoot的performTraversals开始的,它经过measure,layout,draw三个过程最终将View绘制出来。performTraversals会依次调用performMeasure,performLayout,performDraw三个方法,他们会依次调用measure,layout,draw方法,然后又调用了onMeasure,onLayout,dispatchDraw。measure:对于自定义的单.

2020-12-23 14:57:15 273

转载 Android 启动优化总结

前言性能优化包括很多方面,比如:启动优化、布局优化、内存优化、卡顿优化、网络优化、数据库优化、内存泄漏优化、包体积优化等等。冷启动、温启动、热启动首先了解下启动的这三个概念,也是面试常被问到的: 冷启动。冷启动指的是该应用程序在此之前没有被创建,发生在应用程序首次启动或者自上次被终止后的再次启动。简单的说就是app进程还没有,需要创建app的进程并启动app。 比如开机后,点击屏幕的app图标启动应用。冷启动的过程主要分为两步:1)系统任务。加载并启动应用程序;显示应用程序的空

2020-12-23 11:05:51 533

转载 Android插件化原理

一、Android插件化技术我们在平时的开发过程中,会经常遇到产品需求的变更或者出现bug,在传统的模式中,我们需要首先需要修改代码,然后重新打包Apk再上线,用户在打开应用的时候就会进行更新了。但是这种模式有几个缺点,一是上线周期长,从修改代码到用户更新需要较长的时间;二是用户更新代价较大,每次用户更新都需要下载整个Apk包,整个Apk包包括了一个应用的所有代码,要消耗用户较多的流量,并且,如果是一些重要的更新,为了确保用户都能更新到,还需要用到强制更新,即用户打开App后如果不更新应用则退出应用,这

2020-12-22 17:21:14 1216

转载 Android热修复原理

前言热修复框架很多,但热修复框架的核心技术主要有三类,分别是代码修复、资源修复和动态链接库修复,其中每个核心技术又有很多不同的技术方案,每个技术方案又有不同的实现,另外这些热修复框架仍在不断的更新迭代中,可见热修复框架的技术实现是繁多可变的。1.代码修复代码修复主要有三个方案,分别是底层替换方案、类加载方案和Instant Run方案。1.1 类加载方案类加载方案基于Dex分包方案,什么是Dex分包方案呢?这个得先从65536限制和LinearAlloc限制说起。65536限制随着应用

2020-12-22 14:42:08 601

转载 求两个数的最大公约数

这个问题首先考察的是数学功底,就是看知不知道一些求公约数的算法,比如辗转相除法、更相减损法等;其次就是考察你的代码能力了,看你能不能把算法用代码写出来,写的代码有没有bug,注没注意边界的处理等等。下面我们分别来看一下,不同的候选人会有什么样的表现。第一种,数学功底不扎实的,不知道目前已有的求公约数的方法,那估计只能写出下面这种代码了。//暴力求解privatestaticintgetCommonDivisor(intm,intn){//非法参数的处理...

2020-12-13 15:03:26 230

转载 Android事件分发机制抽象--钓钩模型

页面中有一个 300*300 的蓝色背景 FrameLayout,正中有一个 100*100 的红色背景 TextView。如下图所示:▼接下来的问题只需要围绕 FrameLayout 和 TextView 两个控件的顺序说出事件分发相关方法调用即可。因为场景固定,不存在如果,即答案对应的是唯一路径,不存在如果...就...为了便于理解,在回答上述问题前,我先介绍一下事件分发机制的核心方法以及对应的功能:dispatchTouchEvent:控件事件分发主体逻辑,View 中的该方法用于调

2020-12-13 14:38:04 123

转载 Handler 10问

概述在安卓面试中,关于 Handler 的问题是必备的,但是这些关于 Handler 的知识点你都知道吗?题目层次 Handler 的基本原理 子线程中怎么使用 Handler MessageQueue 获取消息是怎么等待 为什么不用 wait 而用 epoll 呢? 线程和 Handler Looper MessageQueue 的关系 多个线程给 MessageQueue 发消息,如何保证线程安全 Handler 消息延迟是怎么处

2020-12-05 17:43:51 192

转载 APP的回收和重启机制

前言我们在打开APP以后长期锁屏或者将APP放置后台,然后再点击APP图标或者任务栏点击指定的APP,重新打开APP时,会出现一段时间的白屏,那么这个时候其实APP曾经就被回收了,然后随着我们重新打开而重启了整个进程。在讲这个机制之前我们先思考几个问题,然后再带着这几个问题再去深入源码:app是如何被干掉 app被干掉以后,做了哪些处理 启动app进程的时候是怎么检测到app之前被干掉,从而重建APP 系统是如何保存现场的,保存在哪里 系统是如何恢复现场的,从哪里恢复不过对于首个

2020-12-05 17:24:32 1420

转载 面试题目:i++ 是线程安全的吗?

简介volatile关键字保证了在多线程环境下,被修饰的变量在别修改后会马上同步到主存,这样该线程对这个变量的修改就是对所有其他线程可见的,其他线程能够马上读到这个修改后值.Thread的本地内存 每个Thread都拥有自己的线程存储空间 Thread何时同步本地存储空间的数据到主存是不确定的 例子借用Google JEREMY MANSON 的解释,上图表示两个线程并发执行,而且代码顺序上为Thread1->Thread21、不用 volatile假如re

2020-11-23 20:26:48 359

转载 View相关面试题

View 题目层次我们以最常见的两个面试题目(View 的绘制流程 和 View 的事件分发)开始,逐层深入去看一下。先上 View 的绘制流程。View 的绘制流程是 measure -> layout -> draw,这个大家都熟悉。不过由此引申的知识点还是有不少的: 首次 View 的绘制流程是在什么时候触发的? ViewRootImpl 创建的时机? ViewRootImpl 和 DecorView 的关系是什么? DecorVi...

2020-11-22 17:43:19 257

android图片缩放

跟随手势实现图片缩放

2017-06-14

空空如也

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

TA关注的人

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