自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(120)
  • 收藏
  • 关注

原创 2021最新Android中高级开发必知必会面试题以及答案整理

一、Handler相关知识1、Handler Looper Message关系是什么?2、Messagequeue 的数据结构是什么?为什么要用这个数据结构?3、如何在子线程中创建Handler?4、Handler post方法原理?5、Android消息机制的原理及源码解析6、Handler 都没搞懂,拿什么去跳槽啊?7、Android Handler消息机制(解惑篇)8、Android消息机制二、Activity 相关1、启动模式以及使用场景?2、onNewIntent()和 on

2021-06-03 20:36:22 2974 9

原创 Android程序员职场规划:让你从职场小白一步一步走进一线公司!!!

阶段规划初入职场 > 小规模公司 > 中型团队开发 > 一线公司团队开发 > 一或二线公司团队管理如何走出小规模公司?小规模公司按我理解指的是 0 - 200 人公司,Android 开发 1 ~ 3 个,拍着脑袋做事,团队不稳定,容易整个部门被GC (Garbage Collection)由于毕业学校很难在简历上发出亮点,再加上零碎的Android知识,毕业后能进一家互联网公司拿着不少的工资已经很快活了,但是短暂的快感带来的是无尽的空虚,而且很容易一叶.

2021-05-28 17:16:34 3014 31

原创 最新Android大厂高频面试题解析大全

第一章 Android相关1.Android进程间通信(IPC)机制Binder简要介绍和学习计划2.Activity的启动方式和 flag 详解3.Android源码分析-资源加载机制4.Android 中 Thread、Handler、Looper、MessageQueue 的原理分析5.Android源码解析之setContentView6.Android AsyncTask 源码解析7.Android lntentService 完全解析当Service遇到Handler8.深入剖析

2021-05-19 20:18:00 287 4

原创 “Android Utils“ 实现TextView 区域自定义点击

需求项目中常有需求:要求长段文本中实现点击局部文本并执行自定义事件。本文针对类似需求进行简易的分析并编写相关工具类。分析首先多TextView实现肯定是不行的:一是代码冗余;二是若可点击文本换行时不好处理。接着看其效果类似超链接,自然想到使用Html.fromHtml,将可点击区域加上a标签。可是点击a标签默认会调用外部浏览器打开指定链接。跟进Html.fromHtml方法可知,其返回的是一个Spannedpublic static Spanned fromHtml(String source)

2021-06-07 21:29:41 428 3

原创 【Android源码】深入源码分析UI的绘制流程 附:Android源码解析资料分享

View的绘制流程setContentView如果你熟悉 Activity 的启动流程的话那么对时序图 ActivityThread 中 handleLaunchActivity 方法不陌生,该方法在启动 Activity 后会被调用执行 performLaunchActivity,在 performLaunchActivity 内部通过反射创建 Activity 对象。//ActivityThread#performLaunchActivityprivate Activity performLa

2021-05-31 21:25:30 868 24

原创 2021京东 Android 岗 Java 面试真题解析

一、java 面试题熟练掌握 java 是很关键的,大公司不仅仅要求你会使用几个 api,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些 java 有关的一些算法,设计模式等等。java 基础面试知识点1.java 中==和 equals 和 hashCode 的区别答案【答案不唯一,可自己衡量】:equalsequals 的作用是判断两个对象是否相等。通过判断两个对象的地址是否相同来判断。一般用于基本类型数据的比较,判断两个值是否相同也可以用于类的比较,同样也是比.

2021-05-26 21:52:28 309 21

原创 2021Android App开发工作必知必会之【性能优化】

Android App 启动优化全记录一、应用启动概述1、应用启动的一般流程应用的启动,从桌面点击应用图标到主界面用户可操作,大致遵循下面的流程:可以看到应用启动过程中,最重要的两个进程就是 SystemServer 和 App Process . 其职责划分如下:SystemServer 负责应用的启动流程调度、进程的创建和管理、窗口的创建和管理(StartingWindow 和 AppWindow) 等应用进程被 SystemServer 创建后,进行一系列的进程初始化、组件初始化(Acti

2021-05-25 22:14:31 1084

原创 Kotlin协程之flow工作原理

概述最近想学习一下 Kotlin 中 flow 的用法, Google 上搜了搜发现很多比较 RxJava 和 flow 的文章,其实我在实际业务中从来没有用过 RxJava, 倒不是因为它不好,而是…我一直傻傻不太会用 RxJava 的操作符,看不太懂,又一直没花时间(懒惰)去研究它那些操作符的原理,就一直不怎么敢用。这次看到了 flow, 想着还是先去了解了解它内部几个操作符的原理吧,不然用起来总是不太踏实。需要注意的是 Flow 需要在协程中使用, 因此配合协程,可以方便地切线程。分析 flow

2021-05-25 17:59:32 2410 5

原创 Android 开机应用扫描

本篇文章只是作为指南引导去看PkMS,不会贴大段代码进行分析,更多是基于方法分析实现的逻辑,另外就是代码是基于Android 11,与Android 10之前代码有比较大的差别。本文的内容PkMS是怎么知道apk的位置系统应用和普通应用的区别应用扫描的过程以及应用信息的保存PkMS怎么知道apk的位置答案是按照路径,对于手机用户安装应用都是放在/data/app,对于系统应用则是分布各个分区中,可以简单的认为是目录,/data就是data分区,以下的分区都会被扫描,并且只会扫描priv-.

2021-05-19 14:53:09 807 2

原创 Flutter数据库的使用

说明Flutter原生是没有支持数据库操作的,它使用SQLlit插件来使应用具有使用数据库的能力。其实就是Flutter通过插件来与原生系统沟通,来进行数据库操作。平台支持FLutter的SQLite插件支持IOS,安卓,和MacOS平台如果要对Linux / Windows / DartVM进行支持请使用sqflite_common_ffi不支持web平台数据库操作在安卓或ios的后台执行使用案例notepad_sqflite 可以在iOS / Android / Windows /

2021-05-18 16:21:05 3043

原创 [干货]设计模式:六种单例的创建方式,外加一大波Android进阶架构师资料分享

设计模式千千万,总是单例最常见。单例模式的定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。六种单例的创建方式1.饿汉式public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; }}优点: 基于类的加载机制

2021-05-18 14:52:11 212 7

原创 关于如何彻底搞定Android Kitkat+沉浸式状态栏效果

一、设计模式六大原则在讲解架构设计之前,先讲解一下设计模式的六大原则,虽然是设计模式的六大原则,但我们在进行架构设计的时候也应该尽量遵循这些原则;六大原则如果仅看概念会比较抽象,而且也不容易理解。这里我们举一个生活中的例子:汽车是基类;轿车是汽车的一个子类;汽车都是在路上跑的,所以我们把公路抽象成一个接口,让汽车实现此接口;汽车都可以用来载人,所以我们把人抽象成一个接口,让汽车实现此接口;汽车也可以载鸡鸭鱼,不过需要通过人来携带上去,因此把鸡鸭鱼放入人的接口中;下面对每一个原则给处官方解释,然后结合汽

2021-05-17 20:27:10 359 2

原创 Android执行Service有两种方法,一种是startService,一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。

Android执行Service有两种方法,一种是startService,一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。1、生命周期上的区别执行startService时,Service会经历onCreate->onStartCommand。当执行stopService时,直接调用onDestroy方法。调用者如果没有stopService,Service会一直在后台运行,下次调用者再起来仍然可以stopService。执行bindService时,S

2021-05-15 20:03:56 721

原创 耗电优化(三):JobScheduler,WorkManager

// 在android8.0以后的电量提醒问题。(文章分成JobScheduler和WorkManager两个大部分,互不影响,可以自行查阅)问题描述在Android8.0以后的安卓手机上,为了实现App在后台的时候也能接收到服务器端的实时消息,使用了Service,然而在关闭App或进入后台时,系统则会经常弹出一个无法清除掉的消息:“有耗电高的应用在后台”。为了解决这个问题,我们查阅了Android开发者的官方文档,有关后台任务(Background Task)的部分。由于这部分文档只有英文的

2021-02-07 16:43:51 1086 4

原创 耗电优化(二):Battery Historian

作者:隋胖胖LoveFat链接:https://www.jianshu.com/p/c223c95744d3Battery Historian github地址:https://github.com/google/battery-historian本文介绍在mac/windows上搭建Battery Historian的基本环境,以及如何采集安卓电量数据,最后如何在Battery Historian上分析电量数据。一、mac上搭建Battery Historian基本环境1.安装Docker.

2021-02-07 11:56:46 584

原创 耗电优化(一):Doze&Standby

一.电池省电优化(Doze和App Standby模式)从Android6.0开始,系统提供了两种省电功能(延长电池寿命和使用时间):Doze和App StandbyDoze和App Standby模式会延缓CPU和网络活动实现节能;1.Doze模式1.进入Doze模式 在手机未充电,完全静止且熄屏一段时间后,Android系统会自动进入Doze模式 2.Doze模式效果 1.网络访问被挂起 2.Wake Locks被无视 3.AlarmMana

2021-02-06 17:50:55 625

原创 内存优化(四):Mat大对象与泄露检测

使用android shell命令查看内存使用情况使用adb shell dumpsys meminfo pkgname或者直接使用AndroidStudio里面的memory usage功能然后就会出现如下信息:Applications Memory Usage (kB):Uptime: 14237237 Realtime: 23790474** MEMINFO in pid 8071 [com.xtc.watch] ** Pss Private Pri

2021-02-06 10:51:41 1579

原创 内存优化(三):Profile内存检测工具

大纲内存抖动和内存泄漏内存大户,Bitmap内存优化Profile内存检测工具Mat大对象与泄漏检测【内存抖动和内存泄漏】Out Of Memory(内存溢出)翻译中文就是内存用完了,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error,此时称之为溢出。(注:非exception,因为这个问题已经严重到不足以被应用处理)。为什么会OOM?分配的少了:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。应用用的太多:并且

2021-02-05 14:46:09 1127

原创 内存优化(二):内存大户,Bitmap内存优化

一、Bitmap:Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。常用方法:public void recycle()  // 回收位图占用的内存空间,把位图标记为Deadpublic final boolean isRecycled()  //判断位图内存是否已释放public final int getWidth() //获取位图的宽度public final int getHeight() 

2021-02-05 11:25:46 371 1

原创 内存优化(一):内存抖动和内存泄漏

LMK;内存抖动、内存泄漏与内存溢出优化的结果:使得app流畅不卡内存抖动短时间内有大量对象创建与销毁,它伴随着频繁的GC。比较典型的就是字符串的拼接造成内存抖动。比如:String str = "";for(int i=0; i< 10; i++) { str += i;}+=操作会编译成StringBuilder对象,然后调用StringBuilder的append方法进行拼接。所以上述代码会创建10个StringBuilder对象,每执行一次+操作都会新创建一个S

2021-02-04 17:35:32 1403

原创 老程序员薪水被应届生倒挂了,不爽就跳槽?还是老老实实提升自己的技术重要!

不爽就跳槽?老板狂喜,你赶紧走吧!前言不知道大家注意到没有,虽然大家都在说找工作好像竞争越来越激烈,但是这几年应届生入职的薪水也是一年比一年高。我记得我16年毕业的时候,15K就已经算是非常不错的offer了。到了今年,20多K的offer遍地走,甚至不乏30K、40K的SP。让我不禁怀疑自己是不是生错了时代。我记得很清楚,16年的时候华为的打包价大概是9K,到了17年直接涨到了15K。美团也是,两三年前也不过17K左右,今年涨到了20+。显然公司内部的调薪是跟不上这样剧烈的涨幅的,那么必然带来的.

2021-02-04 11:21:55 3150 13

原创 布局检测与优化(三):Hierarchy Viewer与Layout Inspactor工具

工具推荐UI检测的工具,Hierarchy Viewer和Layout Inspector。Hierarchy Viewer官方地址Layout Inspector官方地址虽然Hierarchy Viewer已经废弃了,但感觉还是有必要介绍一下的。Hierarchy Viewer工具打开方式AS版本:3.3.2 打开方式:本地安装SDK目录->sdk->tools->monitor.bat老版的AS打开方式:本地安装SDK目录->sdk->tools-

2021-02-03 16:36:23 623

原创 布局检测与优化(二):过度渲染检测

前言Android 中的过度绘制是指同一个像素被绘制多次,从绘制性能角度讲,同一像素点被绘制的次数当然越少越好,这样有利于减轻 GPU 的工作压力,事实上,在具体开发过程中 ,不可避免的可能会出现过度绘制,这里,Android 系统本身在开发者选项里已经提供了一个选项开关 Debug GPU overdraw(调试 GPU 过度绘制),用于检测 App 的过度绘制, 只要打开这个开关,App 界面就会在不同的界面区域根据像素的绘制次数显示出不同的颜色。2.基本介绍1)打开手机的过度绘制开关。操.

2021-02-03 11:53:32 546

原创 Android插件化进阶宝典,Android高级插件化强化实战!(附源码)

最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内满足需求和项目的增长,同时又能快速响应问题和迭代新需求,这就是一个矛盾点。此时,插件化技术正好风生水起,去了解各个主流框架实现思路,看看能对目前工作是否有帮助,是很有必要的。插件化介绍百度百科里是这么定义插件的:「 是一种遵循一定规范的应用程序接口编写出来的程序,只能运行在程序规定的系统平台下,而不能脱离.

2021-02-02 17:43:07 511

原创 布局检测与优化(一):布局层级优化

在本文中,我们将全面解析UX中视觉层级的关键原则,探讨如何使用视觉层级来改进产品并优化用户体验。UX中的视觉层级自设计之初,我们已经使用它来传达重要的信息。设计中的每个元素都应有助于改善用户体验,并更清楚地传达该信息。01 视觉层级的重要性视觉层级也是传达信息。如何组织、排序内容,让接受者能够尽可能轻易地理解信息。设计师可以利用视觉元素去区别信息的重要性,引导观看者阅读的顺序或焦点。视觉层级结构用于按设计者希望用户查看它们的顺序对设计元素进行排序。通过使用对比,比例,平衡等原则,帮助在正确的.

2021-02-02 11:09:23 254

原创 启动速度与执行效率优化项目实战(五):Systrace与TraceView工具

一、SysTrace简介Systrace允许你监视和跟踪Android系统的行为(trace)。它会告诉你系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至你可以看到每个线程、进程在指定时间内都在干嘛。它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供给你建议的解决方案。但是不能确定具体有问题的代码在哪里,这里可用用traceview工具。在Android平台中,Systrace主要由3部分组成:   内核部分:Systrace利用了Linux Kernel中的ftrace功

2021-02-01 18:28:10 415

原创 启动速度与执行效率优化项目实战(四):StickMode严苛模式

StrictMode简介StrictMode (android.os.StrictMode) 是一个自Android 2.3版(API 9。Gingerbread,姜饼)引入的类。StrictMode是Strict和Mode的合并,在英语中,strict表示“严格的”,mode表示“模式”,因此,StrictMode就是“严格的模式”,或叫“严苛模式”。既然是严苛的,那么肯定是对什么东西有限制。因为严格的老师肯定不会对坏学生纵容的,对吧,所以可以想见StrictMode是用来监测Android中的什

2021-02-01 11:24:41 441

原创 启动速度与执行效率优化项目实战(三):卡顿分析

作者:闫回链接:https://www.jianshu.com/p/13a13d5aac49大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能,Android系统每隔大概16.6ms发出的VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。我们通常都会提到60fps与16ms,可是知道为何会是以程序是否达到60fps来作为APP性能的衡量标准吗?这是因为人眼与大脑之间的.

2021-01-29 22:07:04 386

原创 启动速度与执行效率优化项目实战(二):启动黑白屏解决

为什么会有黑白屏在桌面点击应用图标后,在app进程没有创建的情况下,需要时间创建app进程,初始化资源,以及启动首页Activity的(这里讨论的首页是指AndroidManifest里面标志的启动页),这就意味点击图标不能马上看到启动页。为了不让用户有卡顿的感觉,谷歌有了Preview Window,在启动页没有绘制完成时,会先初始化一个Window,我们通常看到的黑屏或白屏,就是这个预览窗口。怎么知道是黑屏还是白屏?黑白屏是预加载的窗口,这个窗口的一些属性可以在theme里更改。新建一个项目,会.

2021-01-29 15:38:33 157

原创 启动速度与执行效率优化项目实战(一):冷暖热启动耗时检测与分析

– app热启动app热启动: 当应用已经被打开, 但是被按下返回键、Home键等按键时回到桌面或者是其他程序的时候,再重新打开该app时, 这个方式叫做热启动(后台已经存在该应用进程)。热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application– app冷启动app冷启动: 当应用启动时,后台没有该应

2021-01-28 22:12:12 267

原创 面试阿里P7:利用startActivityForResult如何返回数据到前一个Activity?(附源码+解析)

在Android里面,从一个Activity跳转到另一个Activity、再返回,前一个Activity默认是能够保存数据和状态的。但这次我想通过利用startActivityForResult达到相同的目的,虽然看起来变复杂了,但可以探索下startActivityForResult背后的原理和使用注意事项。要实现的功能如下:从Activity A将数据传到Activity B,再从Activity B中获取数据后,再传回Activity A。在Activity B中添加一个“回到上一页”的Butt.

2021-01-28 14:39:25 211

原创 Crash监控方案(二):Nativie层监方案

缘起:React Native出了有一段时间了,最近又有点时间,所以就打算简单了解一下。首先是IOS,React Native对IOS的支持还是很ok的。下边是代码: NSURL *jsCodeLocation; jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"]; RCTRootView *rootView = [[RC

2021-01-27 22:06:16 216

原创 Crash监控方案(一):Java层监控方案

一、性能监控:要监控应用的性能,首先列出性能监控点(比如方法执行耗时,sql执行耗时等等监控),然后输出要关注的信息,最终根据信息进行数据分析得出性能瓶颈后进行持续优化改进,不同应用、不同场景下,监控点不尽相同,要关注的信息如何获取却是每个工程师都要思考的问题。在接触javassist与javaagent之前,有过几个方案,但发布了几版后发现实现方式太low、成本高、效率低等不足,其中包括:代码中嵌入日志、使用spring管理应用并使用aop、修改jar包源代码增加日志。二、字节码插桩技术实现更高效的

2021-01-27 18:00:10 345

原创 ANR问题解析(三):ANR问题解决方案

本篇文章主要介绍 Android 开发中的部分GMS 包相关APK ANR,闪退问题解决方案知识点,通过阅读本篇文章,您将收获以下内容:一、开机向导时 Google DUO 概率ANR二、开机向导时 Google Calendar 概率 ANR三、开机向导时 ANR 弹框不show的解决方案四、开机向导时 Google Music 概率 ANR五、开机向导时 Google Play Store 概率 ANR六、 Google play Store 下载apk 概率性闪退一、开机向导时 DU

2021-01-26 22:19:27 992

原创 ANR问题解析(二):程序等待原理分析

一、NAND_FLASH操作原理NAND FLASH原理图NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A"问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?答1.在DATA0~DATA7上既传输数据,又传输地址当ALE为高电平时传输的是地址,那么在数据线上是不是只传输数据和只传输地址呢?我们参考NAND FLASH的芯片手册可以知道,对NAND FLASH的操作还需要发出命令,下面有个NAND FLASH的命令表

2021-01-26 20:11:31 406

原创 ANR问题解析(一):AMS系统时间调节原理

AMS提供的主要功能:统一调度各个应用程序的Activity。应用程序需要启动Activity–>报告给AMS,决定是否可以启动–>如果可以,通知应用程序运行指定Activity。AMS必须知道各个应用程序运行的Activity。内存管理。Activity退出时不会立即被杀死,只有在内存紧张时才会自动被杀,这些操作由AMS管理。进程管理。AMS向外提供了查询系统正在运行的进程信息的API。一、AMS启动1.启动流程AMS在SystemServer进程initAn

2021-01-25 22:02:09 673

原创 字节跳动:必面题说一下Android消息机制

本文基于原生 Android 9.0 源码来解析 Android 消息机制:frameworks/base/core/java/android/os/Handler.javaframeworks/base/core/java/android/os/Looper.javaframeworks/base/core/java/android/os/MessageQueue.javaframeworks/base/core/java/android/os/Message.javaframeworks/b

2021-01-25 16:37:09 159

原创 OOM问题原理解析(四):Bitmap压缩方案总结

Bitmap占用内存 = 长 X 宽 X 1个像素所占字节,降低任意参数就可减少Bitmap占用内存!一、质量压缩bitmap.compress(···quality···)ByteArrayOutputStream baos = new ByteArrayOutputStream();bitmap.compress(CompressFormat.JPEG, 10, baos);byte[] bytes = baos.toByteArray();/*bitmap.compress(Compres

2021-01-22 16:53:14 486

原创 OOM问题原理解析(三):生命周期相关问题总结

生命周期总结梳理程序的生命周期包含五个状态Not Running:未运行。Inactive:前台非活动状态。处于前台,但是不能接受事件处理。Active:前台活动状态。处于前台,能接受事件处理。Background:后台状态。进入后台,如果又可执行代码,会执行代码,代码执行完毕,程序进行挂起。Suspended:挂起状态。进入后台,不能执行代码,如果内存不足,程序会被杀死。AppDelegate中的回调方法和通知回调方法:application:didFinishLaunching

2021-01-22 11:51:01 269

原创 OOM问题原理解析(二):JVM内存回收机制与GC算法解析

jvm想必大家听说过,毕竟在工作当中时不时的蹦出了什么OOM…这些东西,让很多的程序员都无从下手,甚至小的互联网公司都流行出了这样的一句话:“性能不够,机器来凑”!那么在此,在工作之余就和大家一起探讨一下jvm调优的一些相关的实战操作,在分析jvm调优之前,你首先要明白java截止今天jdk的版本已经升级到了13的版本,当然我们要了解一下jvm底层的一些gc,也就是垃圾回收器的机制。jvm内存结构jvm的内存结构,相比jmm也就是jvm的内存模型来说容易理解了许多,毕竟可以通过图来在脑子中大概划分出轮

2021-01-21 17:33:05 422

空空如也

空空如也

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

TA关注的人

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