- 博客(106)
- 资源 (5)
- 收藏
- 关注
原创 从源码角度分析view的layout过程
上两篇文章主要讲述了view的measure过程,主要分析了xml文件中控件的height和width设置成不同值的时候,经过测量之后,如何计算出控件的真实高度。所以也就验证了我们经常所说的measure过程就是把match_parent等值转化成在具体设备上的具体的值。 本文主要分析一下layout的过程,同样我们以LinearLayout的layout过程为例。 在ViewR
2015-08-19 16:28:40 4217 5
原创 从源码角度分析linearLayout测量过程以及weight机制
上文从源码角度分析了view和viewGroup的measure机制,如果还没有阅读的同志们,可以前往从源码角度分析Android View的绘制机制(一)阅读。下面我再结合linearLayout的measure过程解释以下两个问题的缘由。问题一:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2015-08-19 15:09:19 7827 20
原创 从源码角度分析Android View的绘制机制(一)
在Android的学习道路上,每一个人员都免不了去翻阅Android的源码,因为只有从源码的角度分析问题,我们才能真正的玩转Android开发。最近由于工作比较闲,总想着想写点什么东西,正好自己也可以整理一下。考虑到view的显示机制是自定义view的基础,也是面试中经常被问到的问题,所以记录此文,和大家共享,因水平有限,望大家踊跃拍砖,不胜感激。 有过自定义view的同行们都应该知道,view的
2015-08-18 17:43:52 2423 1
原创 Android版的股票行情K线图开发
转载请注明出住: http://blog.csdn.net/andywuchuanlong 现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的资料,所以我特地写了一个demo在此处给大家分享一下。下面是做出来的效果图:这个 界面 是如何画出来的我就不做介绍了,大家可以去下载项目源码。背景图是利用canv
2015-06-26 10:31:18 21168 34
原创 Qualcomm 3D图形引擎库演变(二)
本文主要针对Adreno GPU的OpenGL ES 3.0和3.1部分新功能做一个简单的介绍。1 基于Adreno的OpenGL ES 3.0新功能 本节主要描述Adreno GPU上OpenGL ES 3.0的一些功能变化。OpenGL ES 3.0于2012年8月推出,大大扩展了OpenGL ES功能集,适用于嵌入式应用开发人员。那个时候,OpenGL 3.x的很多复杂功能仅限于桌面...
2018-09-19 16:16:51 478
原创 Qualcomm 3D图形引擎库演变(一)
1 概述本系列的相关文章将会介绍关于Qualcomm Adreno GPU Android 平台的OpenGL ES应用的开发以及优化。OpenGL ES是OpenGL 2D和3D图形库的一个子集,主要是为受到处理器能力、内存以及电源功耗的嵌入式系统而设计。这篇文章适合对3D图像API(例如OpenGL ES等)有了解的应用开发者。2 Adreno GPUAdreno GPU作为Qualc...
2018-09-19 14:12:37 2049
原创 Power Optimization SDK介绍之Dynamic API
什么是Qualcomm®Snapdragon™Power Optimization SDK?这里面所说的sdk其实就是给开发者暴露的一类接口。该接口旨在允许开发人员向Qualcomm Snapdragon处理器发出有关内部频率控制机制如何在运行时电源和性能调度决策中协助应用程序的请求。 开发人员界面分为两种独占模式:静态功耗模式和动态功耗模式。静电功耗模式静态功耗模式API旨在帮助开...
2018-09-11 15:45:46 1858 1
原创 AudioRecord判断是否有音频输入
Android党都应该玩过一个叫吹裙子的游戏,这个游戏就是原理就是通过监听用户吹出的气的力度来决定如何把MM的裙子弄飞起来的,所以关键在于如何判断用户吹气的力度问题。现在公司刚好有这个需求要评估就是需要一直监听用户的语音输入,当在两秒内没有语音输入时候就暂停某项事情,有语音输入的时候就要继续做某件事。其实这两件事情的本质原理是一样的,就是通过这AudioRecord来处理用户输入的原始音频数据,从而
2017-01-13 09:20:50 6877 3
原创 下载、编译、运行android 7.1系统(ubuntu 16.0.4)
android 7.x的系统版本新增的很多的新功能,比如说任务处理功能,允许用户双击“最近”按钮去快速切换到自己上一次使用的应用程序中。同时,“最近”菜单中还有一个“清除全部”按钮。再比如说新增了省流量功能,在接近用户计费周期末,或是流量包本身较小的情况下,减少应用消耗的数据流量。在启用这一模式时,系统将拦截后台的数据使用,并在可能的情况下减少前台运行应用使用的数据量,例如限制你看视频,下调画质,
2017-01-03 15:50:29 8976 21
原创 ubuntu系统启动后停在(initramfs)
ubuntu系统由于断电等原因导致文件系统损坏,在开机时停留在initramfs,此时可以输入exit命令退出initramfs,如果不能退出,则可以适用一下方式进入fsck -y /dev/sdbn 命令 修复。修复完毕重启reboot即可。
2016-10-11 08:55:50 32558 3
原创 从源码角度分析android蓝牙设备如何互联?
转载需说明出处: 最近公司需要用到专门的蓝牙设备去连接机器人,由于之前也没有接触过蓝牙,所以就在网上搜寻大把的资料,到最后还是没有什么所获,基本上所有的代码都是用不了的,蓝牙始终是连接不成功。但幸好的是android系统中的setting就附带了蓝牙连接的功能,所以研究下setting还是阔以的。从android3.0开始,蓝牙的api就提供了对蓝牙profile的支持,比如a2dp profil
2016-09-25 15:16:26 5154 2
原创 Android源码目录结构详解
Android |– Makefile |– bionic (bionic C库) |– bootable (启动引导相关代码) |– build (存放系统编译规则及generic等基础开发包配置) |– cts (And
2016-06-26 17:51:41 5183 3
原创 我作为一个面试官的感想
最近公司在招聘android技术岗位,我参与了技术的面试,由于公司人事部门故意给求职人员施加压力,比如说求职者哪方面有点不好,哪方便态度过于散漫,对于求职者而言 听到这些最好是要学会怎么应对,另外,针对我面试的一些求职者,我也给出一些我的感受吧。 1、只要不伤及到自身人格和尊严的问题,出于本在求职,求职者都应该多听,不要有抵触心理。 2、面试的时候不要自以为面试官比你技术差,就算你工作有很多年
2016-03-25 16:43:14 4865 13
原创 做一个具有阳光思维的人
做一个具有阳光思维的人,任何时候,利用阳光的心态去看待别人的每隔举动,利用阳光的思维去思考和人相处的过程。工作久了突然发现我们已经走的太远,以至于忘了为了什么而出发,以前绝对是因为喜爱,可现在却参杂了一点生活因素在里面。但是有一点是不会改变的,就是会一直走向这个行业,做一个阳光道德的从业者。以前认为别人尊敬我,是因为我很优秀,慢慢的我懂了,别人尊敬我是因为别人很优秀,所以从一开始就要用阳光思维去看待
2016-03-13 12:15:22 3158 6
原创 《Android动画高手成长记》跳跳球效果
在介绍本文动画效果实现之前,先来介绍属性动画相关的几个知识点。ValueAnimator与ObjectAnimator。Interpolator插值器与TypeEvaluator估值器。在Android3.0之前,系统提供了两种动画效果实现方式,帧动画frame-by-frame animation和补间动画tweened animation。帧动画就是类似电影播放一样,将整部影片拆分成一片片
2016-01-14 17:00:03 4211 2
原创 Android点击Button水波纹效果
接下来要介绍的就是如何实现上述图中的波纹效果,这种效果如果大家没有体验过的话,可以看看百度手机卫士或者360手机卫士,里面的按钮点击效果都是这样的,另外Android 5.0以上的版本也出现了这种效果。不多说,下面聊聊具体的怎么实现。首先大家看到的是三个button,水波纹的出现给我们的错觉是直接将波纹绘制在button上面的,但是这样
2016-01-03 13:59:48 13392 9
原创 Android TextView两端对齐
Android中的TextView控件默认是做不到两端对齐的,都是左对齐。可能的原因是安卓默认数字、字母不能为第一行以后每行的开头字符,因为数字、字母为半角字符,还有就是文字中的英文字符占用1个字节,而一个汉字占用两个字节。下面我就介绍下实现两端对齐的原理: 1、测量一个中文汉字所占用的宽度 2、根据TextView的宽度和一个汉字所占用的宽度以及字符之间的间隔计算出总行数。 3、根据padd
2015-12-07 17:31:54 9866 5
原创 从源码角度分析Android中的Binder机制的前因后果
前面我也讲述过一篇文章《带你从零学习linux下的socket编程》,主要是从进程通信的角度开篇然后延伸到linux中的socket的开发。本篇文章依然是从进程通信的角度去分析下Android中的进程通信机制。为什么在Android中使用binder通信机制?众所周知linux中的进程通信有很多种方式,比如说管道、消息队列、socket机制等。socket我们再熟悉不过了,然而其作为一款通用的接口,
2015-09-21 16:22:22 3201 1
原创 带你从零学习linux下的socket编程
我们在平时的开发过程中很少接触到socket开发,以前在学习java基础的时候这个socket编程的学习也是一带而过,没有怎么深入的研究学习,现在感觉还是很有必要的去深入了解一下socket。由于现在从事Android开发,Android底层又是基于linux系统的,所以我接下来就聊一下linux下的socket编程,好了,闲话不多说了,进入正题。一切皆socket 在早期的单机系统中,各
2015-09-06 08:32:32 4444 3
原创 从源码角度分析native层消息机制与java层消息机制的关联
上文从源码分析Handler机制中从java层分析了消息机制,接下来本文从native层去分析Android中的消息机制。在一个消息驱动的系统中,最重要的就是消息队列和消息获取和处理,从上一篇文章可以看出handler的消息机制主要是靠MessageQueue进行消息列队,靠Looper进行消息循环,Looper的loop方法中进行轮询消息的实际操作还是依靠MessageQueue的next方法来获
2015-09-02 15:36:16 123027 11
原创 从源码角度分析java层Handler机制
在Android中,当要更新ui的时候,我们必须要在主线程中进行更新,原因时当主线程被阻塞了5s以上就会出现anr异常,会导致程序崩溃。所以一些耗时的操作必须要放在子线程中,但是在子线程中又不能做更新ui的操作,所以为了解决这个问题,Android设计了handler机制,handler的出现建立起了主线程与子进程之间的通信桥梁,使得ui更新问题得到改善,下面就来剖析一下handler。Activi
2015-09-01 16:53:04 7404 4
原创 从源码角度分析view的draw过程
前面已经分析了Android view的测量和布局,并且重点介绍了linearLayout的测量机制。特别感谢博乐对我前一篇文章的推荐以及赞赏,我也会一如既往的写好每一篇文章。接下来的这篇文章会以前两篇文章为基础继续分析draw。 1、从源码角度分析Android View的绘制机制(一) 2、从源码角度分析linearLayout测量过程以及weight机制 3、从源码角度分析view的l
2015-08-21 10:36:29 2249
原创 深入理解ThreadPoolExecutor运转机制
最近发现几起对ThreadPoolExecutor的误用,其中包括自己,发现都是因为没有仔细看注释和内部运转机制,想当然的揣测参数导致,先看一下新建一个ThreadPoolExecutor的构建参数:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
2015-08-05 15:28:59 1527
原创 Android世界第一个activity启动过程
Android世界第一个activity启动过程 第一次使用Markdown,感觉不错。 Android系统从按下开机键一直到launcher的出现,是一个怎样的过程,中间都做出了什么操作呢,带着这些疑问开始源码之旅。 像windows操作系统一样,每个系统的启动都会有一个引导程序,在linux中,当引导程序启动linux内核后,会加载各种驱动和数据结构,当有了驱动之后,开始加载An
2015-07-15 17:40:24 2541
原创 从源码解释Android事件分发机制
在ViewRootImpl的setView方法中,用户的触摸按键消息是体现在窗体上的,而windowManagerService则是管理这些窗口,它一旦接收到用户对窗体的一些触摸按键消息,会进行相应的动作,这种动作是需要体现在具体的view上面,在Android中,一个具体的界面是由一个Activity呈现的,而Activity中则包含了一个window,此window中又包含了一个phoneWi
2015-07-05 13:45:29 1983 2
原创 歌词效果制作
首先看一下效果图大概的思想:先画出颜色为红色的一行文字,测量文字的宽度,假如说是1000,那么截取1000的十分之一的区域,把颜色为蓝色的的一行字画在合格矩形里面。部分代码如下:package com.example.custom.sz;import com.example.custom.R;import android.content.Context;import
2015-06-30 16:13:09 2662
原创 更改已经签名的app中的内容
转载请说明出处http://blog.csdn.net/andywuchuanlong记得上次在南昌中兴的一个项目中遇到过一个这样的需求:一个app可以给多个渠道商去运营,渠道商推广出去可以获得相应的推广金额。那么这种情况下就必须要使得这个app能够唯一的标志一个渠道商。那个时候我们在这个项目中的解决方案是:让用户在app中手动填入渠道商的工号,我现在想想这种方式也是醉了,真不知道那个时候
2015-06-29 12:02:34 5142 4
原创 项目解决方案:解压app — 写入文件 — 压缩app — jarsigner重新签名app — 安装app
记得上次在南昌中兴的一个项目中遇到过一个这样的需求:一个app可以给多个渠道商去运营,渠道商推广出去可以获得相应的推广金额。那么这种情况下就必须要使得这个app能够唯一的标志一个渠道商。那个时候我们在这个项目中的解决方案是:让用户在app中手动填入渠道商的工号,我现在想想这种方式也是醉了,真不知道那个时候项目经理是怎么想的,竟然会给出这样的方案。这次的项目中又遇到了这个问题:需求是这个app能
2015-06-28 20:36:43 3087
原创 Android SQLite数据库版本升级原理解析
Android使用SQLite数据库保存数据,那数据库版本升级是怎么回事呢,这里说一下。一、软件v1.0安装v1.0,假设v1.0版本只有一个account表,这时走继承SQLiteOpenHelper的onCreate,不走onUpgrade。1、v1.0(直接安装v1.0)二、软件v2.0有2种安装软件情况:1、v1.0 --> v2.0
2015-06-26 17:14:56 2523 2
原创 Android如何从外部跳进App
解决这个问题有两个作用:1、不用打开App直接进入某页面2、实现App分享到外部,同时由外部进入App的闭环。这个话题可以分两方面来讲,一方面是从微信进入App,另一方面是从网页进入App。咱们拿http://my.oschina.net/liucundong/blog/354029当例子来讲一下主要通过scheme、host、path、pathPrefix
2015-06-24 09:21:29 2486
翻译 android界面优化技巧
优化将从以下几个方面谈及如何使用 Adapter背景和图像更新请求视图和布局内存分配adapter: 最简单的方法, 最慢最不实用, 更新频率每秒传输帧数10左右 利用 convertView 回收视图, 效率提高 200%,更新频率每秒传输帧数30左右 使用 ViewHolder 模式, 效率提高 250%,更新频率每秒传输帧数40左右
2015-06-23 09:21:21 3009
原创 从源码角度分析imageLoader框架
本文来自http://blog.csdn.net/andywuchuanlong,转载请说明出处对于图片的加载和处理基本上是Android应用软件项目中的常客,很多初学者在遇到图片加载这个问题是,总是喜欢自己写一个http请求,然后使用将流转换成bitmap,从而显示在项目的view中。其实对于图片的处理自己写固然是好,但是要想软件稳定的运行,里面还是需要很多细节东西需要处理的。在github
2015-06-14 19:01:37 2165 1
转载 WebView 良药 android
固定页面宽度[html] view plaincopymeta name="viewport" content="width=320,user-scalable=0" /> meta name="viewport" content="width=device-width, initial-scale=1.0"/> 触控面
2015-05-27 23:02:00 1954
原创 C语言中的回调
回调函数就是通过一个函数指针调用的函数,如果把函数的指针作为实参传给另外一个一个函数,当这个指针被用来调用它指向的函数时,这个过程就是回调。 c语言中的函数原型如下:void method(); 对应的函数指针声明:void (*)(),如果给该函数指针取一个变量名称p,则p指向这个函数的,可以声明为 void (*p)(),该函数指针无参数,返回值为void类型。
2015-05-15 22:06:58 1648
原创 linux 孤儿进程和僵尸进程
孤儿进程和僵尸进程: 如果父进程先退出,子进程还没退出那么子进程的父进程将变成init进程(任何一个进程都有一个父进程) 如果子进程先退出,父进程还没有退出,那么子进程必须要等到父进程捕获到了子进程的退出状态才真正结束,否则这个时候子进程就成为僵尸进程。 如果父进程先结束,子进程会托孤给1号进程 怎样避免僵尸进程呢?是由于父进程没有给子进程收尸,怎么解决这个
2015-05-12 22:28:31 1859
原创 linux 写时复制 copyonwrite
如果多个进程当父进程产生一个子进程时,会把父进程的代码段、数据段等拷贝给子进程,这里边有一个写时拷贝原则,这个动作并不是马上执行的,要等到子进程去修改内存里面的变量时候,才会进行拷贝,拷贝的机制并不是想象的那么简单,拷贝的时候只是拷贝子进程所需要的页,每个进程os都会进行分页管理,虚拟的内存空间2^32远远大于物理内存空间,然后把物理内存分成一页一页的形式,如果这个变量放在第一页,就只会进行第一页
2015-05-12 22:21:35 2703
原创 linux: fork系统调用实现剖析
首先了解一下程序和进程的概念: 程序:程序是完成特定任务的一系列指令集合。 进程:从用户角度来看,进程是程序的一次执行过程。从系统的角度看,进程是操作系统分配内存和cpu等资源的基本单位,进程是资源分配的最小单位。每一个进程都有自己独立的地址空间与执行状态,像unix这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程。 进程数据结
2015-05-12 22:18:10 2664
原创 Android如何获取外网和本地的ip
/** * 获取外网的IP */ public static String GetNetIp() { URL infoUrl = null; InputStream inStream = null; String ipLine = ""; HttpURLConnection httpConnection = null; try { infoUrl = new U
2015-04-30 20:27:43 3572
原创 Android ListView显示倒计时的流畅实现
有人在群里问他实现的倒计时在ListView中很卡,有没有好的方案,我就闲来没事,实现了一下,供参考package com.microchange;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.microch
2015-03-17 14:58:42 4883 6
原创 圆盘抽奖的界面简单实现
闲来无事,做了一个简单的抽奖转盘的ui实现,供大家参考/** * */package com.microchange.lucky;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Pain
2015-03-16 09:00:32 3496 2
OpenCV实战处理课程.doc
2020-02-29
Android button点击水波纹效果
2016-01-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人