Android
文章平均质量分 61
张庚
这个东西的原理是什么呢?
展开
-
Android性能优化(三)——Handler使用不当引起的内存泄露
在写程序的时候,经常会用到Handler,每次写出Handler的时候,系统都会自动在Handler下面画一个黄色的波浪线,之前一直没在意。最近在项目中碰到了一个严重的问题:OOM,才开始关注程序性能的优化,发现原来那个黄色波浪线是有原因。 如下图所示: 至此,我才发现,Handler原来也可以因此内存leak。感觉这些文章写的不错,收集至此: 1、Android中Handler引起的内存原创 2015-05-20 22:32:11 · 3694 阅读 · 0 评论 -
Android 布局中的include标签使用
Android 布局中的include标签使用最近在布局时,有好多页面都是有共同特点的,比如标题:一个同样的样式!如下图所示: 如果给每个页面都单独的写一个标题的布局那就太麻烦了,如果能写一个标题布局,其它页面重用该多好! 这个时候,<include> 就隆重登场了!写一个标题的布局 title.xml:<?xml version="1.0" encoding="utf-8"?><Relati原创 2015-07-28 22:19:07 · 6693 阅读 · 2 评论 -
git-osc自定义控件之:CircleImageView
git-osc自定义控件之:CircleImageView一、CircleImageView的使用在项目中可以发现,用户的头像都是圆形的,感觉很好奇,昨天终于发现了,原来是自定了一个ImageView,先学习下如何使用,使用步骤如下:创建属性文件:attrs.xml,创建路径为—— res/values/attrs.xml ,格式如下:<?xml version="1.0" encoding="u原创 2015-07-23 07:42:33 · 2572 阅读 · 0 评论 -
Android客户端与服务器交互中的token
学习TokenToken是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。Token的引入—— Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相原创 2015-07-23 07:45:31 · 68420 阅读 · 14 评论 -
自定义控件之:PagerSlidingTabStrip
在应用中可以发现各个栏目之间就是靠滑动选项卡来进行区分的,比如:发现中的推荐项目、热门栏目、最近通知。在使用的时候,我们可以左右滑动屏幕来进行切换,这种操作非常的优雅。经过学习源码,发现这是使用了自定义控件PagerSlidingTabStrip来完成的。因此决定学习一下这个自定义控件。开源项目地址: PagerSlidingTabStrip先学习一下这个控件如何使用:声明PagerSliding原创 2015-07-23 14:36:21 · 2130 阅读 · 0 评论 -
开源中国源码学习(八)——枚举类
简介感觉这主页面这块还是比较复杂的,这段时间在学习这部分的源码,一遍遍的读源码,收获比较大的一部分是主页面四个Tab页面的展现形式。 这块儿借助了枚举类来完成相应的操作,是以前没有涉及过的,感觉很新鲜。TabHost的五个Tab初始化总体来说就是通过枚举类来列出5个Tab对应的内容页。在源码中初始化五个Tab页的代码如下所示: //初始化底部的五个Tab页 private void initTa原创 2015-09-07 23:30:47 · 1507 阅读 · 0 评论 -
android:exported 属性详解
为什么会把这个属性单独拿出来学习呢?是因为我在用360漏洞扫描应用时,扫描结果,出来一个android:exported属性,其实之前根本不知道这个属性,更不知道这个属性用来干嘛的,详情见下图: 因此,我决定查了官方API,学习了一下这个属性!android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的翻译 2015-06-11 17:47:31 · 184299 阅读 · 11 评论 -
Android中的多级联动
Android中的多级联动在很久以前,我刚工作的时候也碰到过这样一个需求,那时要做一个环境监测系统的客户端,需求是这样的: 有不同的实验室; 每个实验室有不同的光照、湿度、温度监测器; 每选择一个实验室后,将这个实验室对应的光照、温度、湿度都展示出来。 当时我的实现方式是:在Activity上放两个Spinner,先把实验室数据从服务器拿下来展示出来,当每选择一个实验室后再从原创 2015-10-25 10:07:14 · 5463 阅读 · 0 评论 -
一个日志工具类
一个日志工具类 L.java这是一个日志工具类,挺好用的!分享出来,支持一下功能输出各种级别的log日志:v、d、i、e L.v(“msg”)不带tag的日志输出,并且可以打印出当前所处的文件、方法以及行数; L.vt(“tag” , “msg”)自定义tag的日志输出。格式化json数据 L.json(“json_string”)不带tag的json日志输出; L.json原创 2015-12-28 10:47:59 · 3837 阅读 · 0 评论 -
Dalvik和ART运行时环境的区别
Dalvik和ART运行时环境的区别在此,我并没有打算深入的学习Dalvik和ART两种方式的实现原理,只是想知道他俩的区别。之前,也是零零散散的看过,并没有总结成文字。在此,总结下。Dalvik以下内容来自wikipedia Dalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即“Dalvik Executable”)格式原创 2016-01-16 09:19:56 · 22216 阅读 · 2 评论 -
Android程序Crash异常处理
在写程序时,肯定会碰到各种问题,在解决这些问题肯定要去看控制台打印的异常信息,根据控制台打印的异常信息来进行针对性的解决。那么要解决程序运行在用户手机上崩溃的问题,必须得找到问题的原因。因此就要收集崩溃信息,也就是log日志。Android程序Crash时我们可以做的操作: 1、将Crash信息存到本地,然后上传到服务器,根据上传的异常信息进行针对性的处理; 2、系统自带的Crash界面是很不友原创 2015-06-09 22:53:19 · 3534 阅读 · 0 评论 -
Android 性能优化(六)——资源文件的存放
The following images appear in both -nodpi and in a density folder: a.png, icon.pngIssue: Finds icons that appear in both a -nodpi folder and a dpi folder Id: IconNoDpiBitmaps that appear in drawable-原创 2015-05-24 18:15:40 · 1067 阅读 · 0 评论 -
Android 性能优化(七)——MAT使用
最近在项目中碰到一个问题:严重的OOM!这使我非常的苦恼,每次程序运行后,通过eclipse的 heap dump 工具可以看到划过几页后,程序的内存就会暴涨,由刚启动时的20M涨为120M并且当我销毁掉Activity后,内存不会减少,内存一直维持在 120M左右,这很明显的——有一些东西留在了内存中没有被释放,因此我要寻找解决方案:如何可以知道留在内存里的是什么?经过查找,找见了真有这么一款工具原创 2015-05-27 11:01:13 · 1449 阅读 · 0 评论 -
在Android中使用ExecutorService、Executors、Feature
今天在读程序源码,源码中有一段这样的程序:private final ExecutorService executorService = Executors .newSingleThreadExecutor();final Future<?> future = executorService.submit(new Runnable() { .原创 2015-05-28 10:43:41 · 2166 阅读 · 0 评论 -
Android性能优化(一)——数据结构优化
数据结构优化,使用Sparsearray 替换HashMap 资料: Android应用性能优化之使用SparseArray替代HashMap Android中的稀疏数组:SparseArray问题:Sparsearray之所以比HashMap高效的原因是什么?结合两篇博客以及HashMap和Sparsearray的源码得出以下结论: 1、在数据存储方面,Sparsearray进行了优化原创 2015-05-19 07:39:29 · 2539 阅读 · 0 评论 -
Android性能优化(四)——代码优化工具Lint
一直在想,如果Android中有这样一种工具该多好:可以直接检查出代码中的问题,我可以根据检查出的问题来进行针对性的修改,果然Google后发现,有这样的工具——Android Lint 。 它已经完美的集成到了Eclipse中,我们可以方便的使用。两种使用方式: 第一种方式: 第二种方式: 两种操作的方式效果是一样的,最终的结果如下图所示,可以直接看到项目中存在的问题,根据问题的原创 2015-05-21 21:34:59 · 1361 阅读 · 0 评论 -
Android性能优化(五)——利用软引用和弱引用
第一次接触软引用和弱引用,是在看一个视频项目的时候碰到的那个时候没有太在意,也就过去了; 第二次接触他们是在,一个开源项目的源码里,感觉这东西是不是有点用呢? 第三次接触软引用和弱引用,是在自己的项目里,因为最近一直被一个OOM困扰,所以想好好研究一下,如果来优化性能。通过Eclipse自带的内存分析工具,发现程序一旦运行,内存就暴涨,想到,是否可以这样做:让那些不需要的内存,自动被回收掉,腾出原创 2015-05-21 23:14:15 · 2955 阅读 · 0 评论 -
Android 绘图中的抗锯齿处理
今天在读程序源码的过程中到一段这样的代码:canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG)); 不太明白,Google了一下,原来是进行:抗锯齿处理的。同时,学习了一下Android绘图中的两种抗锯齿处理方式。首先要搞明白锯齿是什么?如下图所示,左边为未经过原创 2015-05-28 19:21:28 · 7928 阅读 · 0 评论 -
如何正确的使用SharedPreferences?
这是我最近碰到过的一个问题,之前并没有一个清晰的认识!唯一的印象是,SharedPreferences 是可以用来存取数据。直到前些日子,在360漏洞扫描应用后,才意识到这个问题,如何正确的使用SharedPreferences呢?以下是360漏洞扫描的信息:关于SharedPreferences顺便再复习一下:SharedPreferences 是Android 中的内置AP原创 2015-06-18 10:31:10 · 18357 阅读 · 0 评论 -
Android中点击按钮后隐藏输入法
在Android中登录界面、发表回复、评论的时候,常常有这样的需求:当点击登录,评论后,需要隐藏输入法。如下图所示: 实现方式://将输入法隐藏,mPasswordEditText 代表密码输入框InputMethodManager imm =(InputMethodManager)getSystemService( Context.INPUT_METHO原创 2015-05-18 07:52:46 · 5124 阅读 · 1 评论 -
LinearLayout中借助:weightSum和layout_weight布局
如图说是,为一个Activity的自定义标题,现在需要借助Linearlayout中的weightSum和layout_weight布局来实现: 在开发中使用LinearLayout 进行View的布局时,要实现这样的布局有很多种布局方式,程序源码是使用硬编码的方式来做的,硬编码的弊端在于屏幕宽度发生变化的时候,布局就会发生变化。借助于LinearLayout 特有的 android:layout原创 2015-06-02 19:12:00 · 2663 阅读 · 0 评论 -
Android编码规范
刚实习找工作那会儿是很困难的,基本上投出去的简历都是石沉大海,因为没有实际的项目开发经验、没有牛逼的背景、更重要的是没有真才实学,尽管我大学期间读的是计算机专业,也算是科班出身,可是……你懂的。后来勉强一家公司收留了我,然后一个问题立马出现在我的面前,那就是编写代码时候变量的命名:TextView ,ListView ……几乎是每一个.java or .xml 文件中命名的格式都不一样。其实,自己在原创 2015-06-04 23:56:48 · 3710 阅读 · 0 评论 -
ARM与X86 CPU架构对比区别
ARM与X86 CPU架构对比区别CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。早期的CPU全部是CISC架构,它的设计目的是 CISC要用最少的机器语言指令来完成所需的计算任务。RISC和CISC是设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡转载 2016-01-16 09:38:49 · 37991 阅读 · 3 评论 -
针对实体编程
在项目中,之前同事Json解析的时候,之前都是这么写的 try { JSONArray list = response.getJSONArray("list"); if(list.length() == 0){ img_nocontent.setVisibility(View.VISIBLE);原创 2016-01-18 14:55:28 · 1500 阅读 · 0 评论 -
向每一个错误致敬——用户上传破损图片时,你的App会怎样?
问题:在上传图片的时候,如果用户选择了一张破损图片上传,你怎么应对?凶案现场:某年某月某日,我正在写代码时,一人拿着手机,怒气冲冲的朝我跑过来,吼道:“怎么回事儿,我上传图片的时候,点这个图片图片就闪退了,点那个图片没事儿。” 我迫不及待的看了下,我靠,还真这么诡异。为什么会这样?二话不说,插上电脑,打开终端,输入: adb logcat *:E于是,错误尽览无余:很明显在EyishengAPI.j原创 2016-01-18 23:11:55 · 2166 阅读 · 1 评论 -
单个App的UI测试
本文翻译自:Testing UI for a Single App 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!单个App的UI测试测试单独的App的用户交互可以帮助你确保用户在和你的App交互是,不会遭遇一些非预期的结果或者遇到非常糟糕的用户体。如果你需要确保你的App的UI功能的正确性,你就应该养成创建用户交互界面测试的习惯。A翻译 2016-05-12 15:51:49 · 3250 阅读 · 0 评论 -
跨多个App的UI测试
本文翻译自:Testing UI for Multiple Apps 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!跨越多个App进行UI测试通过跨越多个APP之间的交互来测试你的APPUI,让你确认你的APP表现是否正确,比如:用户在你的APP和其他APP之间或者进入系统UI之间进行切换操作时。一个例子比如用户切换至短信APP它允许翻译 2016-05-13 16:27:56 · 6791 阅读 · 0 评论 -
自动化UI测试
本文翻译自:Automating User Interface Tests 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!自动化UI测试UI测试可以让你确保你的App满足最基本的功能需求同时有一个高质量的标砖,这样就更容易被用户接受。一种UI测试的方法是人工测试:一个测试人员对目标App进行一系列的操作来确保各个功能的正确性。然而,这翻译 2016-05-11 10:21:41 · 3614 阅读 · 0 评论 -
Mockito
本文中API文档部分,翻译自:Mockito 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!Mockito 是什么?Mockito 是一个开源的Java测试框架,它能够Mock对象、验证结果以及为测试用例打桩。Mockito 有什么特点?Mockito 在运行时Mock对象,并且模拟被测试对象的行为,从而达到消除依赖的效果。Moc翻译 2016-05-06 17:12:19 · 6799 阅读 · 0 评论 -
测试你的Service
测试你的Service如果你实现了一个本地Service作为你的App组件,你应该测试Service来确保它不会表现出未预期的方式。你可以创建instrumented单元测试来验证Service的表现是正确。比如,这个Service存储和返回正确的数据值并且可以争取的执行数据操作。Android Testing Support Library 提供了测试你的Service对象的Api,以隔离的方式。翻译 2016-05-18 10:18:04 · 2357 阅读 · 0 评论 -
测试你的Content Provider
本文翻译自:Testing Your Content Provider 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!测试你的Content Provider如果你实现了一个Content Provider来存取数据或者为其它App提供数据,你应该测试你的Provider来确保它按照预期的方式来表现。这节课描述如何测试公开的Conte翻译 2016-05-19 10:13:03 · 1853 阅读 · 0 评论 -
测试App组件的集成
测试App组件的集成如果你的App使用了用户不直接和他们进行交互的组件,比如Service或者 Content Provider , 你应该验证并确保这些组件在你的App中以正确的方式和用户进行交互。当你开发这些组件的时候,你应该养成编写集成测试的习惯,来验证这些组件在你的设备或者模拟器上的表现。 注意:Android没有为BroadcastReceiver 提供独立的测试用例类。为了验证Bro翻译 2016-05-17 09:37:50 · 1296 阅读 · 0 评论 -
Google Developer Day 2016见闻
作为一个菜鸟今天凑热闹参加了GDD,还是挺有意思的,知道了一些新的东西,体验了Google好玩儿的产品。今天我主要参加的是Android的分会场,当我在会场亲身体验的时候其实感觉也没什么,会场间歇玩儿手机的时候,发现——额,GDD竟然是个这么大的新闻!以下是我残存的记忆能想到的内容整理出来的,但是不全!有好多代码没记下来,等到官方keynote和视频出来后,我再仔细学习下:Session1: And原创 2016-12-09 00:26:55 · 1234 阅读 · 0 评论 -
Android多线程相关知识总结——源码分析
这篇文章主要讨论Android中多线程相关的内容,其中包括如下内容 Java 多线程的基础知识 预备基础知识,包括但不限于:Callable、Future、RunnableFuture 、FutureTask、Executor、ThreadPoolExecutor、Android中的消息机制 AsyncTask的实现原理,主要是源码分析 AsyncTask存在的问题以及使原创 2017-03-21 20:18:03 · 1461 阅读 · 0 评论 -
Android 6.0+ 运行时权限——基本使用
简介Android 6.0引入了新的权限模式——用户直接在运行时管理应用权限。此版本引入了一种新的权限模式,如今,用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。 要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。 要请求权限,请调原创 2017-03-12 17:15:28 · 1062 阅读 · 0 评论 -
构建有效的单元测试
以下内容翻译自Google官方文档:Building Effective Unit Tests 水平有限自己感觉很多内容翻译并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进! 构建有效的单元测试单元测试是你的App测试流程中的基础测试。通过创建和运行单元测试来检验你的代码,你可以非常容易的验证你代码中独立的逻辑部分是否正确。在每次构建之后运行单元测试,可以帮助你快速翻译 2016-05-08 11:10:53 · 1821 阅读 · 0 评论 -
构建Instrumented单元测试
本文翻译自:构建Instrumented单元测试 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!构建Instrumented单元测试Instrumented单元测试运行在你的物理设备或模拟器上,而不是你本地机器中的jvm。如果你需要获取instrumentation信息(比如目标App的Context)或者 你需要一个android翻译 2016-05-10 09:41:17 · 3723 阅读 · 0 评论 -
向每一个错误致敬——Android HotFix
Android HotFix —— AndFix使用说明项目以飞快的速度迭代,2周进行一次迭代升级。每次开发完功能跑通,在现有机型上测试没问题的话,就提交市场。在以极快的速度迭代的时候,避免不了出现各种问题,传说中的bug 或,重大bug,需要紧急修复 或,可以下次迭代修复的bug 或,影响用户体验的行为出现bug后,我们的一贯做法: 发布紧急版本,等待用户下载更新。可是,并原创 2016-01-16 19:58:15 · 8260 阅读 · 3 评论 -
向每一个错误致敬——导入第三方库遇到的坑
导入第三方库遇到的坑 今天在Github上找了个好玩儿的库,想拿过来看看。结果在导入该库的时候,一直出错。最终搞定了!该库地址:FloatingGroupExpandableListView这个库可以做到:Android中的二级列表加头并且在滑动的过程中每一个组列表可以悬浮在最上面。 如该库介绍的那样: FloatingGroupExpandableListView is a huge原创 2016-01-10 16:51:00 · 3261 阅读 · 0 评论 -
在团队协作中,该如何提交一份干净、可靠的代码给队友?
在团队协作中,该如何提交一份干净、可靠的代码给队友?首先对Android Studio的工程目录中的文件做个介绍: 当我们新建一个Android Studio工程后,调整为Project视图后,工程结构如下图所示: 其中包括: .gradle ——>gradle 运行以后生成的缓存文件夹 .idea ——>是android studio 工程打开以后生成的工作环境配置文件夹。原创 2015-12-18 07:03:29 · 7418 阅读 · 1 评论