android
文章平均质量分 83
newhope1106
这个作者很懒,什么都没留下…
展开
-
内存泄露检测神器 -- LeakCanary源码分析
鉴于笔者能力有限,如有疏漏错误之处,敬请原谅,本文只做抛砖引玉的作用一、内存泄露介绍内存泄露基本上都是由于不恰当的使用,当对象使用完了之后,还存在强引用,导致该释放的时候,没有释放,一直占用内存,我想是很多人会遇到的问题,一般的解决思路是生成hprof文件,再用mat等内存分析工具来查看,找到怀疑点,然后对照着源码再来验证。这里有一个很好的工具,可以在运行期间就能检测到内存泄露,并且输出最原创 2016-12-01 20:33:32 · 1345 阅读 · 0 评论 -
Android微信智能心跳方案(转)
来源:http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207243549&idx=1&sn=4ebe4beb8123f1b5ab58810ac8bc5994&scene=0#rd前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援。刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳转载 2017-01-22 20:23:49 · 856 阅读 · 0 评论 -
google的GCM推送使用简介
转载请注明出处:http://blog.csdn.net/newhope1106/article/details/54709916GCM即Google Cloud Messaging,主要用于消息推送的,即使在应用没有起来的情况下,客户端也能通过GCM收到来自服务器的消息。GCM支持Android、IOS和Chrome。由于GCM需要google service支持,在国内基本不能用,经常原创 2017-01-24 19:59:11 · 44469 阅读 · 6 评论 -
binder再探(1)
前面文章只是对binder的几个核心部分做了简要介绍,本文将按照启动顺序或调用顺序对binder作详细的介绍。一、binder驱动初始化binder驱动作为内核模块,首先被加载进来,做初始化操作,首先binder驱动把自己注册成为misc设备,文件目录会创建/dev/binder节点,然后提供了操作binder设备方法,这里初始化调用是通过binder_init函数调用的。static原创 2017-03-04 17:29:11 · 590 阅读 · 0 评论 -
binder再探(2)
前面的Activity的启动流程(http://blog.csdn.net/newhope1106/article/details/53355189),已经知道了Activity的启动将会调用下面代码:try { intent.migrateExtraStreamToClipData(); intent.prepareToLeaveProcess();原创 2017-03-04 17:41:54 · 531 阅读 · 0 评论 -
binder再探(3)
再来看客户端通过 ActivityManagerNative.getDefault().startActivity启动一个Activity, ActivityManagerNative.getDefault()方法static public IActivityManager getDefault() { return gDefault.get(); }private原创 2017-03-04 17:49:49 · 542 阅读 · 0 评论 -
Binder再探(4)
总结上述的binder通信过程涉及四方,binder驱动、Service Manager、AMS(服务端)、Activity(客户端)binder驱动binder驱动作为动态内核模块,通过binder_init函数,将自己注册成为misc设备,创建/dev/binder节点,提供三个核心的函数binder_open、binder_mmap、binder_ioctl给用户空间调用原创 2017-03-04 17:51:41 · 417 阅读 · 0 评论 -
Handler、Looper和MessageQueue的关系
Handler初始化之前,首先需要初始化Looper,主线程中在进程启动,调用ActivityThread.main方法的时候,已经调用了Looper.prepareMainLooper初始化Looper了,而普通线程则采用Looper.prepare方法初始化,不管哪种方式,都是创建了一个Looper实例,保存到ThreadLocal这个全局静态变量中,Handler在初始化的时候,从Threa原创 2017-03-12 08:22:29 · 458 阅读 · 0 评论 -
再谈Activity启动流程(1)
前面已经分析过Activity的启动流程,本篇再继续重新整理,深入拓展一番,如有缺漏,敬请谅解。注:以下分析过程不会贴出所有的代码,在末尾附上的文章里面有详细的代码调用。部分文件路径frameworks/base/core/java/android/app/Activity.javaframeworks/base/core/java/android/app/Instrumentatio原创 2017-04-02 11:55:51 · 470 阅读 · 0 评论 -
再谈Activity启动流程(2)
四、Activity的显示从AMS的startActivity开始经过相当复杂的调用,终于调用到ApplicationThread中,通过跨进程的方式调用了scheduleLaunchActivity,然后扔到H这个handler中进行处理了,然后再主线程中调用handleLaunchActivity方法。核心的方法有2个,一个是performLaunchActivity,另一个是handle原创 2017-04-02 11:56:11 · 634 阅读 · 0 评论 -
Android性能优化总结
面试的时候,基本都会问到性能优化的知识点。从用户角度来说,能够感知的性能问题,基本上是慢卡顿问题,如果不考虑系统问题,单从应用角度来说,能够优化用户感知的性能问题的,可以从资源和体验角度着手。资源角度,包括硬件资源,CPU、GPU、内存、硬盘;软件资源,代码和算法。体验角度,动画和数据加载优先级。下面就从这几个方面着手分析,可能还存在其他优化方式,就不一一描述啦。一、涉及CPU方面的优化1原创 2017-04-24 22:55:41 · 607 阅读 · 0 评论 -
binder初探
一、引言前面android进程的创建流程(http://blog.csdn.net/newhope1106/article/details/54932800)有提到过binder,先来看看这部分的代码。 public static final void zygoteInit(int targetSdkVersion, String[] argv, ClassLoader classL原创 2017-02-27 00:53:18 · 920 阅读 · 0 评论 -
android进程创建流程(基于android 6.0)
转载请注明出处:http://blog.csdn.net/newhope1106/article/details/54932800调用android四大组件的时候,没有在AndroidMenifest.xml中设置process属性的情况下,都会创建应用进程。点击桌面上的图标,其实是启动了对应的Activity,此时应用进程也就创建了。创建进程调用的接口是Process.start.原创 2017-02-08 20:44:14 · 1056 阅读 · 0 评论 -
android四大组件启动流程-ContentProvider启动流程(基于android 6.0)
前面已经介绍了Activity、Service、BroadcastReceiver的启动流程Activity的启动流程:http://blog.csdn.net/newhope1106/article/details/53355189Service启动流程:http://blog.csdn.net/newhope1106/article/details/53843809Broadcas原创 2017-01-13 22:43:37 · 1364 阅读 · 0 评论 -
上拉加载更多,下拉刷新的弹性ListView的实现
本文主要的是介绍如何实现弹性的listview,以及上拉和下拉功能的实现,其实对一般的View也是适用的,稍微修改一下就可以啦。里面涉及一些对事件分发的处理,有兴趣的可以看一下这个链接,http://blog.csdn.net/newhope1106/article/details/53363208。源码地址:https://github.com/newhope1106/flexibleLis原创 2016-12-06 20:44:41 · 3058 阅读 · 0 评论 -
从源码角度学习Volley框架
转载请标明出处:http://blog.csdn.net/newhope1106/article/details/53615398虽然网上有很多文章是分析Volley框架的,不过博客的作用,一个是让别人看了能够有所得,另一个是让自己同样的有所得。1.首先来介绍一下Volley框架(1)下载sdk不能直接使用volley,需要自己编译,不过maven中提供了jar包下载,http:/原创 2016-12-13 22:24:01 · 676 阅读 · 0 评论 -
时间轴控件TimeLineView的实现
首先来看看效果图吧android中经常会用到时间轴,那么如何实现时间轴呢?首先我们了解时间轴的构成(1)时间球(2)直线(3)位置下面介绍一个时间轴实现的开源代码:https://github.com/newhope1106/TimeLineView把这几个问题解决再掌握基本的绘制过程就可以实现时间轴了。下面先来看代码。(1)定义属性,想要用户自定义的变量原创 2016-12-08 21:43:07 · 6310 阅读 · 0 评论 -
Activity启动流程,界面绘制到事件处理的整个流程(基于Android6.0源码)(1)
基于Android6.0源码分析Activity启动流程,界面绘制到事件处理的整个流程。由于本人能力有限,可能存在有问题的地方,敬请原谅。本文只从显示源码,不显示关系图。一、Activity的启动流程用户点击桌面启动某个应用的时候,是通过点击桌面的图标,然后桌面应用通过调用startActivity的方式启动了应用的界面,桌面界面其实本身就是一个Activity,因此可以通过start原创 2016-11-26 21:14:12 · 1164 阅读 · 0 评论 -
Activity启动流程,界面绘制到事件处理的整个流程(基于Android6.0源码)(2)
二、界面的绘制流程上一节把Activity的启动流程介绍了一下,在Activity的启动流程中,onResume的生命周期是显示界面的过程,下面来分析界面是如何显示的。PhoneWindow并不是具体的布局界面,我们可以看到handleResumeActivity中,有下面代码调用 final void handleResumeActivity(IBinder token,原创 2016-11-27 09:27:55 · 2028 阅读 · 0 评论 -
Activity启动流程,界面绘制到事件处理的整个流程(基于Android6.0源码)(3)
四、事件的分发流程Activity的生命周期,基本上可以在ApplicationThread看到,先不做说明,下面来介绍一个事件的分发流程。由于linux把所有的设备都抽象为文件,因此触摸等输入事件也在/dev/input有对应的文件,当我们点击屏幕的时候,可以通过这些文件知道,具体的我也不清楚,就不班门弄斧了,直接从java层最开始调用触摸事情的地方开始吧。也就是Activity的dis原创 2016-11-27 10:16:38 · 955 阅读 · 1 评论 -
[转]【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
原文地址:http://www.tuicool.com/articles/jyA3MrUAndroid开源库自己一直很喜欢Android开发,就如博客签名一样, 我是程序猿,我为自己代言 。在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 不定期的更新 这篇文章。Android下的优秀开发库数不胜数,在本转载 2016-12-22 17:43:47 · 922 阅读 · 0 评论 -
android四大组件启动流程 - Service启动流程
前面已经提过Activity的启动流程,有兴趣的可以查看:http://blog.csdn.net/newhope1106/article/details/53355189,里面主要都是代码流程。Service启动有2种方式,一种是startService,一种是bindService,两者目的不一样,前者是做长时间的后台操作(比如下载,播放音乐),后者主要是完成交互,前者的需要调用stopS原创 2016-12-23 20:54:06 · 1041 阅读 · 1 评论 -
android四大组件启动流程-BroadcastReceiver启动流程(基于android 6.0)
前面已经写过Activity的启动流程:http://blog.csdn.net/newhope1106/article/details/53355189 和 Service的启动流程:http://blog.csdn.net/newhope1106/article/details/53843809 ,本篇是关于广播的,其实标题写得不准确,广播的注册、发送和接收应该是一起,下面开始讲解内容吧。原创 2017-01-07 17:07:25 · 4295 阅读 · 1 评论 -
Android开发人员必备工具库
android编程中经常会用到各种工具类,下面是有人整理出来的各种工具类,推荐收藏作者github:https://github.com/Blankj/AndroidUtilCode摘抄其目录如下,最新更新请跳转到上面的githubActivity相关→ActivityUtils.java→DemoisActivityExists : 判断是否存在Act原创 2017-02-05 09:22:11 · 768 阅读 · 0 评论 -
基于事件触发的开源框架EventTrigger
一、介绍离散发生的事件,我们都可以把它抽象成触发器模型,事件因为某种原因发生了,可以抽象成触发器因为某种原因触发了,android世界中的事件也是如此,因为网络发生改变导致触发了网络触发器,因为时间到了,触发了计时触发器。这就是有了基于事件触发的开源框架EventTrigger。目前该开源框架还处于初始阶段,还存在很多不足,欢迎大家都来fork和pull request,把这个框架变得更加原创 2017-05-20 09:28:02 · 1613 阅读 · 0 评论