自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android踩坑经验-View.post获取宽高及子线程调用更新UI原理解析

解决两个问题:1:view post为什么能获取宽高?2:子线程执行时为什么可以更新主线程UI?Android开发中,在Acivity的onCreate方法中通过控件的getMeasureHeight/getHeight或者getMeasureWidth/getWidth方法获取到的宽高大小都是0,这个问题比较常见,因为在onCreate方法执行时,View还没有measure,比较常见的方...

2019-03-26 18:00:04 1412

原创 Android踩坑经验-View post方法不执行

View.post()方法在android7.0之前,在view没有attachToWindow的时候调用该方法可能失效,尤其异步线程,如在onCreate,onBindViewHolder时调用view.post方法,可能会不生效,在异步线程view.post方法不执行的情况居多。建议使用Handler post方法代替。看下Android 7.0之前的源码,以4.4版本代码为例:publi...

2019-03-26 17:58:22 5396 1

原创 Android踩坑经验-Finalize TimeoutException原因及解决方案

调用栈信息:背景知识:FinalizerDamemon和FinalizerWatchdogDaemonFinalizerDamemon析构守护线程,重写了finalize的对象,在创建时会新建一个FinalizerReference,这个对象是强引用类型,封装了override finalize()的对象,下面直接叫原对象。原对象没有被其他对象引用时(FinalizeReference除外...

2019-03-26 17:56:40 2799 1

原创 Android踩坑经验-优化APK大小时不可轻易删除/META-INF目录

在优化APK大小时,往往会删除无用资源,重复资源等,有些童鞋可能看到META-INF文件夹下都是声明信息,签名信息等,因此感觉除了签名信息外,其他信息可随意删除,但其实不然。META-INF文件夹主要存放的配置信息,签名信息,service注册信息,文件列表如下:重点有MANIFEST.MF,CERT.RSA,CERT.SF三个文件和services,proguard文件夹:MANIFES...

2019-03-26 17:53:47 2073

原创 Android踩坑经验-notifyDataSetChanged列表不刷新问题分析

本文主要阐述在使用RecyclerView中遇到notifyDataSetChanged列表不刷新问题,表现是:列表滑动时,notifyDataSetChanged可以正常刷新界面,但Fragment切换Tab后,再次滑动RecycleView,列表不刷新。通过打断点调试,发现数据请求没有问题,每次滑动到底部时自动请求数据,在数据集上添加网络数据,通过打断点信息可得到size由20变为40,数据...

2019-03-26 17:49:59 15319 2

原创 Android踩坑经验--App启动时间正确统计姿势

在这里讨论的是指冷启动,热启动不在讨论范围内。如何正确衡量App的启动时间,一般有以下几种方法:AMS日志分析法,录屏分帧法,代码埋点法,logicat分析法等,本文重点阐述最常用的AMS日志分析法,录屏分帧法,代码埋点法,重点阐述代码埋点法的正确姿势。1:AMS日志分析法adb shell am start -w package_name/activity_name输出结果如下:$ ad...

2019-03-26 17:45:46 4891

原创 Android踩坑经验--RecycleView Adapter缓存问题

项目中遇到一个问题,先看现象:发现在一个屏幕上,会出现显示格式不一致问题,比较诡异,同一个布局文件,为什么绘制出来显示效果不一样呢?RecycleView item的显示,主要是onCreateViewHolder和onBindViewHolder两个方法,看下方法调用情况:发现在滑动的时候,并没有执行onCreateViewHolder,而是执行的onBindViewHolder,只有...

2019-03-26 17:40:29 3778 1

原创 Android内存优化(四)系统级别的内存回收策略优化--process reclaim

曾经反编译过某厂商的framework代码,结合厂商机器的表现,发现了进程内存管理的部分逻辑,记录如下:之前一直怀疑某厂商的AMS.updateOomAdjLocked()方法中,添加了进程管理逻辑,结果是进程管理的代码还没核实,倒是找到了运行时proc reclaim逻辑,在反编译的AMS.updateOomAdjLocked​()方法中,发现以下逻辑: try {...

2018-10-08 23:25:29 2861

原创 Android内存优化(三)Java Heap内存分析之MAT使用及其二次开发

MAT作为Android Java内存分析的利器,功能十分强大,通常可用此工具发现内存泄漏问题,内存异常问题,网上的帖子非常之多。分析过程大概如下:1:安装MAT工具2:生成hprof文件adb shell am dumpheap /data/local/tmp/.hprof3:hprof-conv转换一下直接生成的hprof文件打开会有诸多问题,需要sdk工具转换一下4:MAT打开...

2018-10-08 22:38:46 724

原创 Android内存优化(二)系统进程之logd的native memory优化

最近的测试发现,C1 logd进程内存占用比Mate9 logd进程内存占用大很多,详细数据如下: 内存最大值(KB) 内存最小值(KB) 内存平均值(KB) C1 39794 21985 39353 Mate9 2804 ...

2018-06-18 22:31:04 3916 1

原创 Android内存优化(二)之Bitmap的内存申请与回收(Android N和O的对比)

在Android O上大面积的爆了以下这段trace,开始怀疑是出现了native内存泄漏问题,但经分析后发现是Android N和Android O在处理Bitmap的内存存储不同导致的问题,并不是内存泄漏~ trace如下(待补充):内存申请 由于Bitmap构造方法不是public的,使用Bitmap时,一般都是使用BitmapFactory的decode操作,以BitmapFact...

2018-06-18 21:56:47 5224

原创 Android内存优化(二)之如何分析native heap

首先先来看一下实际中我们看到的native heap(我临时dump的com.android.settings进程的native heap):Android Native Heap Dump v1.0Total memory: 17898619 Allocation records: 32501 Backtrace size: 16z 1 sz 585216 num ...

2018-06-01 17:07:13 17042

原创 Android内存优化(二)之获取native heap文件过程

获取某个进程native heap的方法大致分为两个步骤: 1:配置两个属性,上一篇博客中有介绍,具体操作如下: adb shell stop adb shell setprop libc.debug.malloc.program app_process adb shell setprop libc.debug.malloc.options backtrace ...

2018-06-01 16:00:28 6978 2

原创 Android内存优化(二)之malloc debug简单介绍与初始化工作

简单介绍malloc debug工具,源码中有这么一段解释(在malloc_debug目录下有README.md):When malloc debug is enabled, it works by adding a shim layer that replacesthe normal allocation calls. The replaced calls are:* `malloc...

2018-04-22 19:01:34 13931 6

原创 Android内存优化(二)之Native内存泄露检测工具malloc debug基础篇

google 有个debug工具malloc debug,可以用于检测native内存泄露,我们都知道,分配内存的方式有许多,为什么要选malloc_debug?而不是calloc_debug等呢~原因在native世界,我们经常用到的语言就是C语言和C++语言,首先看下C语言的内存分配:C语言的内存分配方式在C语言中,分配内存方式主要有三种: <1>从静态存...

2018-04-08 20:19:55 4129

原创 Android内存优化(一)之AsyncTask内存泄露使用WeakReference修复不生效

近期有个业务报了一个好Bug,按照常规的内存泄漏修复方案修复后依然不生效~ 具体如下: 最开始测试出AsyncTask的内存泄露,然后按照内存泄露修复方案修复(static+weakreference+cancel),但依然有内存泄露GC ROOT thread java.lang.Thread. (named ‘AsyncTask #125’)references com.miui....

2018-03-29 14:33:51 705

原创 Android内存优化(一)之FinalizerDaemon和FinalizerWatchDog多线程内存泄露案例

前期有一个内存泄露case跟多线程相关,简单记录如下:问题描述跑一晚上的内存测试后,会出现很多的内存泄露,泄露trace如下In *********:2.0.0:2.* ************.editor.photo.app.PhotoEditor has leaked:* GC ROOT static java.lang.Daemons$FinalizerDaemon...

2018-03-08 17:33:23 10748 12

原创 Android内存优化(一)之Android常见的Java层内存泄露场景及合理的修复方案

首先解释下内存泄露: 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄露分为永久性泄露和临时性泄露.永久性泄露是指只要泄露出现,泄露的内存永远不会回收,此种情况一般问题比较严重,一旦发现,需快速解决.临时性泄露是指泄露场景出现后,在在未来的某段时间...

2018-02-12 10:45:01 1328

原创 Android内存优化(一)之Java层内存泄露监测工具原理(Leakcanary)

近期时间相对宽裕一些,把相关的知识点整理下放到博客~ 封装的Java层内存泄露监测工具主要基于开源的leakcanary project,下面对Leakcanary原理浅析 Leakcanary简介Leakcanary工具是用来检测Java层内存泄露的工具,严格的说是检测Activty的内存泄露(监测的是Activity的onDestroy方法,后面会提这一点),能帮助我们发现很多隐藏的内...

2018-01-06 17:01:48 715 2

原创 GraphicsStatsService常见的几个问题带来的思考

最近有一部分工作涉及到此服务,有几个问题: 1:为什么会有两个相同的package 2:进程挂掉后再重启,为什么Since不变 3:有没有3个Package相同的情况 4:Since值什么时候改变 我们先从宏观角度看代码,再具体解释几个问题: Android系统中GraphicsStatsService服务是用来汇总卡顿数据的,通过adb shell dumpsys graph

2017-07-20 23:48:36 3375 1

原创 解决ubuntu usb开机无法使用,只有重启才可恢复问题

1 进入bios, 进入【Advanced】中的【XHCI PreBoot Mode】,设置成Disabled属性 如果没有此项,可略过 2 ctrl+alt+t 打开命令行,输入sudo vim /etc/default/grub找到GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"改成 GRUB_CMDLINE_LINUX_DEFAULT=”quiet

2017-06-20 15:02:54 1998

原创 Linux下用SCP无需输入密码传输文件

在Linux环境下,两台主机之间传输文件一般使用scp命令,通常用scp命令通过ssh获取对方linux主机文件的时候都需要输入密码确认。不过通过建立信任关系,可以实现不输入密码。这里假设A的IP:192.168.10.1B的IP:192.168.10.2需要从A免密码输入复制文件至B。在主机A上执行如下命令来生成配对密钥: ssh-keygen -t rsa 按照提示操作,注意,不要输入

2017-05-16 16:19:37 481

原创 dumpsys原理

dumpsys在分析问题时,是一个常用的工具,用来dump系统相关信息。 如: dumpsys activity 当前系统所有activity堆栈信息 dumpsys cpuinfo 当前系统CPU相关信息dumosys在/system/bin目录下,因此我们可以abd shell调用,如果有android源码,则可以make dumpsys,对应mk文件:/frameworks/native

2017-05-10 23:23:45 1595

原创 Linux 开机启动脚本

网上的资料: 系统脚本可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc?.d链接,也可以直接放置在/etc/rc.d/rc.local中。 init.d脚本包含完整的start,stop,status,reload等参数,是标准做法,推荐使用。 为特定用户使用的程序(如有的用户需要使用中文输入法而有的不需要)放置在~/中的bash启动脚本。我采用的方法是修改/etc/

2017-04-05 19:06:56 1841

原创 捋一捋dropbox源码

DropBoxManagerService简述DropBoxManagerService(简称DBMS)主要用于记录 Android 运行过程中, 内核, 系统进程, 用户进程等出现严重问题时的 log, 可以认为这是一个可持续存储的系统级别的 logcat,主要用于Debug调试。启动源码SystemServer.java中添加dropbox服务java try {

2017-03-12 16:53:00 2554

原创 2016年总结

本人是2016年3月末毕业于北京邮电大学,目前在小米科技工作。今天是2017年1月25日,登上自己的博客,发现博客冷淡无比,如同对我的一种嘲讽一样,之前在学校读研究生时,闲来无事写写自己的博客,满足而惬意,工作了之后总感觉没有时间,其实则不然,思想的松懈,思想的滑坡,让自己安于现状,而没有时刻充满能量,勇于突破,

2017-01-25 11:06:43 399 1

原创 JDK 1.7源码阅读笔记(七)集合类之HashMap

前言  HashMap一直是我的一个心病,因为在面试的时候HashMap是个出现频率高发点,不管是知识点,还是现场编程,而且自己当时答得不好,今天就回归到源码,真正探究下HashMap的底层实现,去获知它的特性。特性描述(1)基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hash

2015-09-12 10:39:43 1901

原创 <LeetCode(Java版)>String to Integer

题目:Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input case

2015-09-09 21:36:39 390

原创 JDK 1.7源码阅读笔记(六)集合类之AbstractCollection

前言  (1)AbstractCollection类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。 AbstractSet,AbstractList,AbstractSequentialList,AbstractQueue直接继承于AbstractCollection,后面还会说它的四个子类。  (2)要实现一个不可修改的 collection,编程人员只需扩展

2015-09-04 15:31:33 458

原创 JDK 1.7源码阅读笔记(五)集合类之Collection

前言  Collection是个接口类,可以说它是集合类的源头,Set接口、List接口、Queue接口都是实现了Collection接口,其提供了一些通用的方法,但未提供任何具体的实现,提供此类是为了能统一的以接口的方式使用一些方法。   源码//继承了迭代器的接口,即整个集合类都采用了迭代器模式(设计模式的一种) public interface Collection<E> extends

2015-09-02 16:44:37 1166

原创 JDK 1.7源码阅读笔记(四)集合类之Arrays

前言  (1)Arrays包含用来操作数组(比如排序和搜索)的各种方法。Arrays提供的方法都是静态方法,Arrays的构造函数是私有的,也就是不能被实例化。   (2)包含一个允许将数组作为列表来查看的静态工厂。   (3)除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。   注:   此类中所含方法的文档都包括对实现

2015-09-02 15:51:14 540

原创 JDK 1.7源码阅读笔记(三)集合类之LinkedList

前言  (1)LinkedList的内部实现是双向链表,继承了AbstractSequentialList,实现了List, Deque, Cloneable, java.io.Serializable接口,因此LinkdeList本身支持就支持双端队列操作。LinkedList**允许所有元素(包括 null)**。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get

2015-09-02 09:58:07 1467

原创 <LeetCode(Java版)>Reorder List

题目:Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given {1,2,3,4}, reorder it to {1,4,2,3

2015-09-02 00:06:06 324

原创 JDK 1.7源码阅读笔记(二)集合类之ArrayList

ArrayList是我们在java编程中经常使用的类,如何能更好的掌握并使用一个数据结构,个人感觉还是需要研读它的源码,在理解源码的基础上加以应用,才可以明白所以然,明白为什么要这样用。前言  ArrayList源码还是较长的,所以索性把阅读源码的感悟写到前面,关于源码那部分只是作为一个备份,如果有童鞋对ArrayList源码感兴趣,那么可以慢慢看后面的源码,我把自己对于源码的理解写到源码里了!如果

2015-09-01 21:55:13 718

原创 <LeetCode(Java版)>Add Two Numbers

题目:You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a li

2015-08-31 23:40:11 351

原创 JDK 1.7源码阅读笔记(一)String,StringBuilder,StringBuffer

其实对于JDK源码一直有一种情愫,希望能看到前辈们的精华之处,感受代码之美,今天起我也去感受下,如果有和我志同道合的盆友呢,希望咱们一起努力,多多指教吧!   先来看下JDK帮助文档对于三个类的解释,源码中对于三个类的解释都是英文,所以我找的解释就是中文的JDK帮助文档。   String:   public final class String extends Objectimplement

2015-08-31 15:25:01 1361

原创 <Java笔试面试题>final,finally,finalize()区别

Java笔试面试题中,对于final,finally,finalize()三个方法考的还是挺频繁的,掌握这三个的区别,也是Java程序员所必备的。重点掌握  1.final   final修饰类,说明这个类不能被继承,是以个顶级类。   final修饰变量,说明这个变量是常量。   final修饰方法,表示这个方法不能被重写,不过可以重载final方法。   2.finally   fin

2015-08-30 15:28:17 1795 1

原创 <Android笔试面试题>ANR异常

1)什么引发了ANR?        在Android里,应用程序的响应性是由Activity Manager和Window Manager系统服务监视的。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR:        · 在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)        · BroadcastReceiver在10秒内没有执行完毕

2015-08-30 11:41:26 458

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-08-30 11:30:01 302

原创 <LeetCode(Java版)>Two Sum

*欢迎来到Leet*Code的世界,本人程序员一枚,灰常菜的那种,目前处于找工作时期,正在刷LeetCode上的题目,希望通过自己写博客能记下自己的思路与成长,也希望能帮助到有需要的朋友。由于本人非大神,如果有什么问题,还希望能多多指正,谢谢啦!如果有和我也在忙着找工作的小伙伴呢,希望咱们可以多多交流呀,一起加油吧!闲话不多说,咱们进入LeetCode的题目吧!题目:Given an arra

2015-08-30 11:04:41 302

空空如也

空空如也

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

TA关注的人

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