自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2021-01-29 22:07:04 406

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

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

2021-01-29 15:38:33 162

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

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

2021-01-28 22:12:12 275

原创 面试阿里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 221

原创 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 224

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

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

2021-01-27 18:00:10 358

原创 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 1019

原创 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 417

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

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

2021-01-25 22:02:09 686

原创 字节跳动:必面题说一下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 167

原创 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 504

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

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

2021-01-22 11:51:01 276

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

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

2021-01-21 17:33:05 446

原创 OOM问题原理解析(一):adj内存管理机制

*本文主要介绍Android的lowmemorykiller的oom_adj的相关概念,以及根据一些案例来阐述了解oom_adj对于做Android应用开发的重要意义。**一、lowmeorykiller中进程的分类以及各类进程的adj值*​ *在Android的lowmemroykiller机制中,会对于所有进程进行分类,对于每一类别的进程会有其oom_adj值的取值范围,oom_adj值越高则代表进程越不重要,在系统执行低杀操作时,会从oom_adj值越高的开始杀。********系统lowm

2021-01-21 11:56:40 1081

原创 WebView交互架构项目实战(四):WebView与Native的通信框架手写实践

目录原理如上图所示,web页面与Native的交互主要是通过Jsbridge完成的,web页面通过调用JsBridge中的Java接口来调用一些系统API,如打开摄像头等,这也是最常用的功能,最主要还是web页面调用一些系统接口,Native直接调用一些JS方法还是比较少见的,常用的方法是Native向web页面中注入一些JS代码动态修改页面,例如注入JS以达到对网页进行换肤,黑夜模式等。Native调用JS方式1:通过loadUrl(“javascript:”)我们以一个小小的例子来说明这个

2021-01-20 17:56:47 250

原创 WebView交互架构项目实战(三):多进程WebView使用实践

*本文介绍自己在使用WebView的过程中遇到的一些问题的解决方法和对WebView的一些优化实践**浏览器缓存知识介绍:*浏览器缓存之 Expires , max-age, Etag , Last-Modified (其中Expires,max-age是客户端在这个时间之前不去向服务器端发送请求验证资源是否有更新,Etag, Last-Modified是服务器决定是否需要返回资源,未更新的资源不需要返回)Expires  http/1.0中定义的header,是最基础的浏览器缓存处理,表示资

2021-01-20 12:00:58 2328

原创 WebView交互架构项目实战(二):JS与Java交互

前言这篇中主要介绍Java与本地的Html 中的JS进行交互。步骤在布局文件中添加WebView控件。获取到WebView实例。调用setJavaScriptEnabled(true)方法设置支持JS。调用addJavascriptInterface(Object object, String name) 方法加载javascript中的调用方法。调用loadUrl(String url)方法加载本地的Html。说明:加载本地的Html文件时,url 为 file:///android_a

2021-01-19 17:27:15 190

原创 Android:主流三方库源码教你快速上手Leakcanary

一、原理概述首先,笔者仔细查看了Leakcanary官方的github仓库,最重要的便是对Leakcanary是如何起作用的(即原理)这一问题进行了阐述,我自己把它翻译成了易于理解的文字,主要分为如下7个步骤:1、RefWatcher.watch()创建了一个KeyedWeakReference用于去观察对象。2、然后,在后台线程中,它会检测引用是否被清除了,并且是否没有触发GC。3、如果引用仍然没有被清除,那么它将会把堆栈信息保存在文件系统中的.hprof文件里。4、HeapAnalyzerS

2021-01-19 11:41:35 153

原创 WebView交互架构项目实战(一):使用与原理

作者:lijiankun24链接:https://www.jianshu.com/p/c7166cecd77e现在 Android 应用中都会多多少少嵌入一些 H5 页面,在 Android SDK 中有一个名为 WebView 的组件,它是一个 webkit 内核的高性能浏览器,在 Android 应用中的 H5 页面用它展示是非常合适的。本篇文章就介绍一下 WebView 相关的一些知识,相关代码放在 GitHub 的 WebViewPractice 的工程里。本篇文章主要介绍以下几点:W.

2021-01-18 17:14:11 325

原创 阿里P7大牛教你Binder内存拷贝的本质和变迁

说起Binder的内存拷贝,相信大多数人都听过“一次拷贝”:相较于传统IPC的两次拷贝,Binder在数据传输时显得效率更高。其实不少人在面试时都能回答出上面这句话,但若是追问他更多细节,估计又哑口无言了。其实内存拷贝的概念既简单又复杂。简单是因为它功能单一,而复杂则在于不少人对于虚拟内存,物理内存,用户空间,内核空间的认识并不充分。所谓地基不稳,高楼难立。本文尝试揭示Binder内存拷贝的本质,另外还会介绍新版本中相应实现的一些改动。1. 内存拷贝概述在做任何一件事之前,先明确目的。我相信Bin

2021-01-18 11:31:18 225

原创 自定义TabLayout

前言系统自带的Tablayout用的也不错但是有些功能还不能满足我们这边开发,所以我这边自定义了一个tablayout提供了自定义tab线的长度以及,移动速度,以及禁止某个滑动(tablayout基本功能也提供了)效果图QQ20170327-165412-HD(1).gif实现步骤构造方法添加子控件添加一些xml定义的属性 public MyIndicator(Context context, AttributeSet attrs, int defStyleAttr) {

2021-01-15 21:09:24 952

原创 NestScrollView原理解析

简介NestedScrolling,包含在android.support.v4包中,由 22.10 版本开始引入,支持 5.0 及 5.0 以上的系统。NestedScrolling,简称嵌套滑动,可主要分为NestedScrollingParen和NestedScrollingChild两部分,使用它可以实现一些非常绚丽的效果。Google 帮我们封装好了一些相应的空间,比如 RecyclerView 实现了 NestedScrollingChild 接口,CoordinatorLayout 实现了

2021-01-15 17:35:18 686 1

原创 Meterial Design常见控件的使用(九):Collapsing ToolbarLayout

CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在CollapsingToolbarLayout中的控件(如:ImageView、Toolbar)在响应layout_behavior事件时作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端)。使用CollapsingToolbarLayout:**[plain]** [view plain](http://b

2021-01-14 21:40:34 195

原创 Meterial Design常见控件的使用(八):CardView

目录:CardView简介CardView基本属性(xml文件中)某些属性使用效果CardView使用方法高级效果 波纹点击(像点击Button那样)注意 对低版本的兼容处理CardView简介CardView是API21(Android5.0)发布的卡片式控件。简单的说就是卡片视图,扁平化视图。继承自FrameLayoutpublic class CardView extends FrameLayoutCardView可以作为根布局使用,也可以作为ReCycleView或

2021-01-14 17:25:28 193

原创 Meterial Design常见控件的使用(七):DrawLayout

今天我们来学习一下DrawLayout控件,以前我们都是使用网上的开源框架slidingMenu,但是在安卓5.0后Google就推出了一个强大的design库,下面对于用法进行详细的介绍:一、DrawLayout介绍是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物。drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特

2021-01-13 21:11:39 616

原创 Android:从简历到offer直通车,跳槽大厂必备宝典!

拜个早年今年的春节假期过完,按照法定放假的话,开工已经是2021年2月18日了,有一些比较有人情味的公司,一般也会放到正月初十,也就是在2月22日才会开工。所以基本上跨过农历新年,就马上进入到了企业招聘旺季“金三银四”。按照正常离职都需要提前一个月向公司提交申请的要求,所以呀,想要在年后“跳槽Double”可以赶紧准备起来了!给各位读者老爷,拜个早年!值此新春佳节将近,也没啥好送给大伙儿的,你要说送点吃的,喝的?想必各位朋友也不缺这些!发个红包?就更显得寒碜人,在座的各位今后可都是年薪百万的主)!

2021-01-13 16:56:24 288

原创 Meterial Design常见控件的使用(六):NavigonView,BottomNavigonView BottomSheet

今天的效果在支付宝、淘宝、京东等电商App中很常见。比如支付宝输入密码弹窗、商城下单时选择商品属性时,从下面浮动上来一个PopupWindow,那么今天就带大家用Behavior来实现这两个效果,结果你会发现简直只需要一行代码。总结下现在用的APP:仿支付宝弹出的输入支付密码窗口。仿淘宝/天猫弹出商品属性选择框。知乎首页上下滑动隐藏ToolBar和NavigationBar。…效果预览源码下载:http://download.csdn.net/detail/yanzhenjie1003/

2021-01-12 21:39:14 164

原创 Meterial Design常见控件的使用(五):AppbarLayout

一、AppBarLayoutAppBarLayout 是 LinearLayout 的子类,通过它,我们可以实现简单的布局滚动响应的效果。效果是利用 behavior 完成的,不过相关代码 google 工程师都已经写好,因此我们只需要测试相关属性的效果即可。测试前列出前提条件:AppBarLayout 父类为 CoordinatorLayoutCoordinatorLayout 下有实现了 NestedScrollingChild 接口的滚动视图,例如 NestedScrollVi

2021-01-12 16:47:52 236

原创 Meterial Design常见控件的使用(四):自定义Behavior

在AppbarLayout 与NestedScrollView 联动的时候,我们为NestedScrollView设置了一个Behavior, 通过app:layout_behavior="@string/appbar_scrolling_view_behavior",它的值是一个类的全路径,这个Behavior 是Google已经为我们提供的,AppbarLayout的内部类,专门用于处理可滚动View(如:ScrollView、RecyclerView) 与AppbarLayout 联动的。那么这篇文章

2021-01-11 22:09:56 284

原创 Meterial Design常见控件的使用(三):Snackbar

引言2015年5月,Google发布了Design Support Library,添加了很多组件用于支持Material Design。至今过去已经两年了,版本也由当初的22.2.0到现在的26.0.0 Alpha 1。想要了解其中控件的实现原理,当然是从最简单的开始,那就是这篇文章的主角——Snackbar。基本使用只有文本提示Snackbar.make(view, "This is a message", Snackbar.LENGTH_LONG).show();有点击按钮Sna

2021-01-11 17:53:34 196

原创 Meterial Design常见控件的使用(二):FloatingActionButton

FloatingActionButton简称FAB。一. 对于App或某个页面中是否要使用FloatingActionButton必要性:FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App最主要的功能是通过该FAB操作的。为了突出FAB的重要性,一个页面最好只有一个FAB。二. FloatingActionButton大小通常有两种尺寸\1. 56 * 56dp :默认的大小,最常用的尺寸。\2. 40 * 40 dp :Mini版。当然也可

2021-01-09 17:02:18 164

原创 这是一份面向3年及其以上Android开发者的“万能钥匙”,2020年末大总结一线互联网大厂初中级面试真题系统收录!

前言就要到年末放年假了,小伙伴在家休息的同时也要为来年的“金九银十”面试跳槽季做准备了,需要找工作的小伙伴们该要着手开始复习啦。特此将我2020年收录的一些腾讯、阿里巴巴、字节跳动等等一线互联网巨头的面试真题体系的归类、整理了一下,拿来出分享给大家,希望能给有需要的小伙伴一些力所能及的帮助。也希望收获到你们的一些回馈,比如点赞或者评论,让我知道,做这件事情,是有意义的。废话不多说,直接进入正题。希望可以对你们有所帮助。不多废话,进入正题。目录:Java中高级计算机网络Android高级面试.

2021-01-09 10:43:11 162

原创 Meterial Design常见控件的使用(一):Toolbar

Toolbar 的基本用法常用的方法xml中的设置:<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorAccent" app

2021-01-08 16:42:08 158

原创 布局ViewGroup原理解析(五):GridLayout

1、实例实现代码: 2、用法归纳:当通过:android:layout_rowSpan与android:layout_columnSpan设置了组件横跨多行或者多列的时,如果要让组件填满横越过的行或列的话,需要添加下面这个属性: android:layout_gravity = "fill"①GridLayout使用虚细线将布局划分为行,列和单元.

2021-01-08 11:28:15 157

原创 布局ViewGroup原理解析(四):FrameLayout

今天来说下 Android中几大布局中的FrameLayout, FrameLayout是几个布局中最简单的一个布局,我通常喜欢称它为最纯净的布局。在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。相同层级布局中 FrameLayout的效率也是最高的,占用内存相对来说也是较小的。先上布局文件<?xml version="1.0" encoding="utf-8"

2021-01-07 17:41:15 197

原创 布局ViewGroup原理解析(三):RelativeLayout

Android中最基础的三大布局为FrameLayout、LinearLayout与RelativeLayout。记得刚初学Android 的时候最喜欢用LinearLayout因为它简单易用,但是越做到后面越喜欢使用RelativeLayout,因为它的灵活性和适用范围都要比前两者要好,但是这里也要提醒初学者,不要用RelativeLayout做太多嵌套,会产生性能问题。今天讲的就是在项目开发过程中遇到的一个关于RelativeLayout的问题。问题出现与初步解决在一次版本迭代中,UI宝宝给出了一

2021-01-07 11:49:12 261

原创 布局ViewGroup原理解析(二):LinearLayout

本节引言本节开始讲Android中的布局,Android中有六大布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) FrameLayout(帧布局),AbsoluteLayout(绝对布局),GridLayout(网格布局) 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是LinearLayout的weight(权重属性),在这一节里,我们会详细地解析 LinearL

2021-01-06 16:24:57 201

原创 百度APP技术团队教你Android:Gradle 与 Android 构建入门

声明:原文发布:百度APP技术 【原创: xuduokai】链接:https://juejin.im/post/5e9059bf6fb9a03c621679cf前言无论是否意识到 Gradle 的存在,每位 Android 程序员都会直接或间接的与 Gradle 打交道。每当通过 Android Studio 新建一个工程时,AS 都会自动创建一个通用的目录结构,然后就可以进行开发,在 app 的 build.gradle 中添加一些依赖,点击右上角的 Sync Now,编写代码,点击绿色小箭.

2021-01-06 11:11:51 187

原创 布局ViewGroup原理解析(一):ConstraintLayout

原文:https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ文 / Google 开发者计划工程师 Takeshi Hagikura自从在去年的 Google I/O 大会上发布 ConstraintLayout 以来,我们一直不断改进该布局的稳定性,完善对布局编辑器的支持。我们还针对 ConstraintLayout 增加了一些新功能,帮助您构建不同类型的布局,例如引入链和按比例设置大小。除了这些功能之外,使用 ConstraintLayout 还可以获得

2021-01-05 17:30:23 238 1

原创 ViewPager2原理解析

ViewPager2是Google爸爸在几个月前推出来的新控件,此控件的目的就是为了替代传统的ViewPager控件。至于为什么要淘汰ViewPager,我想就不用解释这其中的原因吧,ViewPager历来最大的诟病就是不会复用View(其实我对ViewPager的原理了解的不多,各位大佬就当我信口雌黄吧????????。)。而ViewPager2内部是通过RecyclerView来实现的,性能当然不容置疑。还有最重要的一点,ViewPager2几乎复制了ViewPager所有的API,所以,ViewPag

2021-01-05 11:31:26 1574 1

空空如也

空空如也

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

TA关注的人

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