- 博客(39)
- 资源 (17)
- 收藏
- 关注
原创 从extends和super浅谈java泛型
从extends和super浅谈java泛型泛型是从jdk 1.5之后引入的,对于开发者而言,使用泛型能够写出更加自然的代码,对于编写一些通用的类尤为有用。想象一下,如果没有泛型的支持,我们在要实现一个Integer类型的链表时,不能直接复用系统的List泛型类的各种子类,而必须自己继承List实现一个专门存储Integer类型元素的链表,特别麻烦不说,当这种链表数量多了,我们代码中会有很多这种类型
2017-05-23 16:29:21
654
原创 Webpack打包font-awesome
使用webpack构建font-awesome或者bootstrap的时候,最常见的一个问题就是构建字体文件的问题。经常会出现无法找到字体文件的问题。下面就讲一下如何正确构建引入字体文件:1. 首先安装依赖: npm install style-loader css-loader file-loader font-awesome-webpack --save-dev2. 在入口文件中引入f
2017-05-13 16:35:33
11169
原创 Mac下IDEA出现cannot find any declarations解决方法
关联本地的JDK首先需要本机安装jdk,注意osx自带的jdk是没有源码的,最好重新安装一下。关联jdk的方法如下:选择工程,然后File->Project Structure。然后在Project中确保Project SDK存在,如果不存在,点击New,选择本机的一个jdk的路径。如图: 然后在Project Structure中的SDKs中看有没有存在的SDK,一般做了第一步,就存在一个SDK
2017-05-04 10:23:08
1598
原创 Glide源码分析(六)——从DecodeJob相关实现看图片加载流程
DecodeJob是集数据加载、解析和回调通知于一体的包装内,它在内部根据配置的不同情况将相关的工作委托给不同的类来实现,是Glide内实现数据加载功能的中枢。首先来看其中会用到的几个比较重要的类。LocalPath和DecodePathDecodePath内部保存有两个主要的成员,一个是由ResourceDecoder组成的解码器集合,用来从指定的数据源中解码数据;另一个是ResourceTran
2017-03-23 19:19:06
1006
原创 Glide源码分析(五)——ModelLoader机制
ModelLoaderRegistryModelLoaderFactory和MultiModelLoaderFactoryModelLoaderFactory是一个工厂类接口,实现类使用它的接口来对外构建不同了类型的modelLoader,它的实现类一般是不同类型的ModelLoader的内部类,例如ByteArrayLoader内部就实现了两个ModelLoaderFactory,分别生成能够将b
2017-03-23 19:17:29
3116
原创 Glide源码分析(四)——Registry机制
Registry是Glide内部实现的模块挂接中心,它建立了功能需求和实现模块之间的映射关系,使这些模块能够根据需求进行灵活的挂载,模块和模块之间又相互独立互不影响,很好地实现了系统功能的解耦。 在Registry内部,提供了对如下几种类型模块的挂载支持:/** * 数据加载模块 */private final ModelLoaderRegistry modelLoaderRegistry;
2017-03-23 19:16:00
1614
原创 Glide源码分析(三)——图片缓存相关实现
LruBitmapPoolGlide实现bitmap缓存的实现类。其缓存功能实现的核心依赖于两个类:SizeConfigStrategy和AttributeStrategy,在API 19之前,使用AttributeStrategy,之后使用SizeConfigStrategy。两种strategy在缓存的功能实现上是一致的,SizeConfigStrategy只是在获取缓存的时候,不严格要求缓存中
2017-03-23 19:14:01
1335
原创 Glide源码分析(二)——磁盘缓存实现
Glide中默认磁盘缓存实现的入口为DiskLruCacheFactory,DiskLruCacheFactory提供了几个接收不同参数的构造函数,以允许指定缓存文件的位置和磁盘缓存的大小。其中比较有意思的是,在构造函数中DiskLruCacheFactory并没有立即构建缓存的File,而是在build函数执行的时候才开始构建缓存File,这算是懒加载的一种吧,即在真正需要使用到缓存的时候才去申请
2017-03-23 19:06:55
1314
原创 Glide源码分析(一)——DiskLruCache磁盘缓存的实现
Glide源码分析(一)——DiskLruCache磁盘缓存的实现Glide磁盘的实现主要是通过DiskLruCache来实现的。DiskLruCache并非针对Glide编写的,而是一个通用的磁盘缓存实现,虽然并非Google官方的代码,但是已经在很多应用中得到了引入使用。journal日志DiskLruCache通过日志来辅助保证磁盘缓存的有效性。在应用程序运行阶段,可以通过内存数据来保证缓存的
2017-03-23 19:02:13
2371
原创 Ubuntu下修改键盘映射
由于公司的电脑是MAC,而我自己家里面的电脑是Ubuntu,在开发环境中,各种快捷键经常离不开ctrl和alt键,但是mac和其他电脑键盘这两个键的位置正好相反,因此在家和在公司来回切换键盘的使用习惯是相当痛苦的事情。
2016-08-29 00:13:47
9949
原创 Linux下解决no jdk found问题
Linux下解决no jdk found问题最近准备在Ubuntu下面搭建Android开发环境,将官方下载的内容解压后,为了能够在dash中方便地搜索,因此又在/usr/share/applications目录下面创建了Android Studio的快捷方式。但是遇到一个奇葩的问题就是:直接在shell中执行studio.sh,能够启动Android Studio。但是通过快捷方式点击打开后提
2016-06-15 23:02:01
6292
1
原创 android FlatBuffers剖析
android FlatBuffers简介概述FlatBuffers是google最新针对游戏开发退出的高性能的跨平台序列化工具,目前已经支持C++, C#, Go, Java, JavaScript, PHP, and Python (C和Ruby正在支持中),相对于json和Protocol Buffers,FlatBuffers在序列化和反序列化方面表现更为优异,而且需要的资源更少,更适合大部
2016-03-13 21:04:05
4813
原创 Java枚举单例
注意enum不是Enum,有Java基础的同学们应该都不会把二者混淆了。简单来说,enmu只是jdk1.5引入的语法糖,它不是java中的新增类型,编译器在编译阶段会自动将它转换成一个继承于Enum的子类,例如如下的代码:public enum GenderEnum { MALE, FEMALE}编译成class文件后,通过javap GenderEnum.class得到的简单的
2016-02-28 17:23:47
4034
1
原创 在MAC OS下面编译flatBuffers的flatc文件
最近在研究google的flatbuffers,因此涉及到使用flatc来讲IDL描述的数据结构编译成flatbuffers能够使用的fbs结构的文件。由于是在MAC OS下面,因此最初尝试使用XCode来编译,但是这个玩意儿特别大,足足有4G+,而且苹果也特别操蛋,在中国没有服务器,因此下载不仅特别慢而且还很容易失败,因此果断放弃而采用cmake来进行编译。
2016-02-20 22:04:07
3988
3
原创 利用MAT进行内存泄漏分析
前言 对于程序员来说码代码容易,保证代码的稳定性很难。有时候写完一个功能可能只需要一天时间,但是这个功能隐藏的bug导致的线上问题排查可能需要一周或者更长时间。因此,拥有良好的代码结构和编码规范是一个程序员应该长期坚持并为之奋斗的一个目标。但是,百密也难免一疏,没有百分之百没有问题的代码,在产品上线前,我们需要对自己的代码进行充分的自测,发现问题解决问题,保证自己产品的稳定性并减少对用户的
2015-12-13 23:31:40
39244
6
原创 Android ANR分析
前言 ANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间(例如造成5s内不能响应用户事件或者BroadcastRe
2015-11-28 21:42:48
45931
10
原创 android content provider java.lang.SecurityException: Permission Denial异常解决
一般情况下,出现这个异常都是因为调用者没有在manifest中声明content provider说需要的read或者write权限导致的。例如,content provider的声明为(注意exported属性为true其他程序才能获取到provider的数据):<provider android:name="com.xxx.xxx.Provider" andro
2015-11-05 13:17:33
1381
原创 使用Android Studio进行本地单元测试(Local Unit Tests)
使用Android Studio进行本地单元测试(Local Unit Tests)由于目前Google已经停止了对Eclipse ADT插件的更新,因此迫使Android的开发者迁移到Android Studio中。Android Studio基于JetBrains IntelliJ IDEA,后者号称世界上最聪明最好用的Java开发IDE。虽然Android Studio提供了很多选项可以为Ec
2015-09-19 22:20:04
4713
原创 ubuntu12.10下下载android源码
最近折腾了一阵android源码下载的问题,在网上找了一些教程照着做,出现了各种问题,归根结底就是因为一些网址被墙了,但是很多教程又没有更新,所以出现了下载中出现的各种问题。强烈建议去http://source.android.com/source/downloading.html#initializing-a-repo-client参考google给出的教程,我最后就是照着这个做下载成功
2013-11-02 17:46:30
3586
原创 android shell 内,sh:cp not found 解决方法
使用mv命令对于只读文件是不可行的,如果你是要将文件在pc机和你的android目标机之间进行传输最简单的方法是使用pull或者push,如果你是在你android目标机内部的不同文件夹下进行文件复制,最简单的方法是使用cat > ,其中代表你要拷贝的文件,表示你需要拷贝到的地方。例如"cat test.txt > /sdcard/test.txt “ 可以将当前文件夹下的test.txt拷贝至
2013-03-27 09:59:26
6566
原创 java.lang.verifyerror问题解决
在android下需要用jxl对excel文件进行读写,之前是直接将jxl.jar包拷贝到工程目录下,然后使用“Build path-->add to build path”来将这个包添加到工程的库当中,结果却老是在实例化类的时候出现java.lang.verifyerror,百思不得其解,在网上查了,说是可能由于导入外部包的时候出现错误,于是将jxl.jar直接拖到工程的lib文件夹下,结果通过
2013-03-01 18:51:42
3321
原创 android 使用Canvas画箭头
画箭头这个东西太麻烦啦,开始想用把箭头画好,然后到指定点旋转的方法,但是,效果一直不好。想用数学的方法来画,但是发现计算很复杂啊。于是google,发现一个兄台使用了java当中的awt实现了画箭头(http://www.bangchui.org/simple/?t16755.html),于是就借过来,改了一下,结果真能用。成果不敢独占,在此拿来给大家分享:public class MyCan
2012-10-18 10:38:24
15493
翻译 Writing device drivers in Linux: A brief tutorial(五)
一个并口驱动程序:并行接口的描述 我将继续修改我之前创建的那个驱动程序从而使它可以在真正的设备上执行真正的任务。我将使用常见计算机的并口,并将这个驱动命名为“parleport” 并口是允许数字信息输入和输出的高效设备。更具体地说,它是D-25针母座。在内部,在CPU看来,它使用了三个字节的存储空间。在PC上,并口的基址(设备的第一个字节)通常都是0x378
2012-09-13 16:43:03
2017
翻译 Writing device drivers in Linux: A brief tutorial(四)
一个名为”memory”的完整的驱动:驱动的初始化部分 现在我将要演示如何建立一个完整的设备驱动:memory.c。这个驱动允许从它读取一个字符或者向它写入一个字符。尽管在正常情况下并不是很有用,但是这个设备却提供了一个很有阐述性的例子,因为它是一个完整的设备驱动;它也很好实现,因为它并不是一个真正的硬件借口,因为它不和真正的硬件交互(除了计算机自己) 为了
2012-09-11 10:51:09
2032
翻译 Writing device drivers in Linux: A brief tutorial(三)
“HelloWorld”驱动:在内核空间加载和卸载驱动 当一个设备驱动模块被加载进内核,一些诸如复位设备、预留RAM(reserving RAM)、中断和输入输出端口等预备工作经常会被执行。 我们需要展示两个函数:module_init和module_exit,这两个函数在内核完成了上述的任务。他们和用户空间的insmod和rmmod相对应,前面我们提到过,
2012-09-01 17:06:31
1755
翻译 Writing device drivers in Linux: A brief tutorial(二)
内核空间和硬件设备之间的接口函数在内核空间也有一些函数来控制设备或者用于内核和硬件之间的信息交换,下表阐述了这些概念.这个表也会随着一些概念的引入而完善. EventsKernel functionsRead data Write data 表 设备驱动事件和与之相
2012-08-30 22:25:20
1625
翻译 Writing device drivers in Linux: A brief tutorial(一)
最近看到一篇国外关于Linux内核入门的比较好的指南,于是就尝试翻译了一下。由于是第一次尝试翻译,加之英语水平有限,错误在所难免,欢迎拍砖!由于没有大段的时间来做这个,一下翻译完是肯定不可能的,故每天翻译一部分。转载请指明出处,尊重别人的劳动成功,谢谢!编写系统驱动:简单指南像一个内核开发者一样编写Linux设备驱动的简要介绍作者:Xavier Calbet
2012-08-27 21:25:24
1656
原创 android ContextMenu不出现的原因
想必android中的ContextMenu大家都很熟悉了,这段时间我在activity当中为一个组件注册了contextMenu后发现长按这个组件ContextMenu就是不出来。因为ContextMenu的原理就相当于当我们出发了这个组件的longClick事件后为我们生成一个菜单。是不是我这个组件的longClick事件一直没有被触发? 简单分析过后我突然想起,我重写了我
2012-08-24 08:33:53
3134
1
转载 java.util.ConcurrentModificationException
java.util.ConcurrentModificationException转载于:http://www.blogjava.net/EvanLiu/archive/2008/08/31/224453.html工作中碰到个ConcurrentModificationException。代码如下:List list = ...;for(Iterator iter = list
2012-07-31 17:30:20
1469
原创 Android中GridView水平滚动和垂直滚动的实现(动态)
经过本人实验,完美实现水平滚动和垂直滚动。话不多说,先看布局文件:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:
2012-07-19 22:00:26
33535
1
原创 ActivityGroup获取其中一个Activity的方法
我是用继承ActivityGroup的方法来做了一个TabHost,其中有两个Tab,我的目的是通过修改ActivityGroup对应的自定义菜单来修改其中一个Tab的布局。之前通过tabhost.getTabWidget().getChildAt(index);的方法来获取某个Tab的View,经过调试,可以得到这个view,但是我却不能通过这个view来获取这个Tab对应的布局当中的组
2012-07-16 08:58:35
3839
原创 eclipse启动出现“An Error has Occurred. See the log file”解决方法
最近在启动eclipse时出现了“An Error has Occurred. See the log file”的错误,点击确定后也不能启动eclipse。查看log文件,出现类似:java.lang.ClassNotFoundException: javax.xml.parsers.SAXParserFactoryat java.net.URLClassLoader$1.run(U
2012-07-15 18:54:16
128834
31
原创 创建TabHost的两种方式的简单分析
最近做了一个TabHost的界面,在做的过程中发现了一些问题,故和大家分享一下。首先我的界面如下:目前就我所知,创建TabHost有两种方式,第一种是继承TabActivity类,然后用getTabHost方法来得到一个TabHost的实例,然后就可以给这个TabHost添加Tab了。示例代码如下:public class PlotHost extends TabActivit
2012-07-12 15:13:30
5689
原创 android模拟器(AVD)不能使用键盘的问题解决
最近将android sdk升级到最新的时候出现了模拟器不能使用键盘的问题,查找资料解决方法如下:在eclipse当中window->AVD Manager,选中你要修改的模拟器,点击edit,然后在Hardware部分选择new,添加keyboard support,同时将添加的这一项的value改为true,这样重启你的模拟器,你的模拟器就可以使用键盘了。
2012-07-06 16:17:50
17211
原创 解决导入android工程后main.xml Graphical Layout不能正常显示的问题
最近导入在Linux下做的一个工程到windows平台出现了原本在main.xml下的布局看不到的问题,试了一下,同时main.xml的代码还是正常的,将工程放到AVD当中运行界面也显示正常。针对这种情况,捣鼓了一下,原来是我在import工程的时候没有选择“copy projects into workspace”,导致最后的工程没有在eclipse的workspace当中,所以出现这种现象,具
2012-07-01 10:03:53
5189
原创 Linux下NDK的安装配置
Linux下NDK的安装配置 在编写android程序的时候如果需要复用一部分以前的c语言程序,可以考虑使用NDK。由于设计到c和c++编程,故强烈建议在Linux下安装上eclipse的CDT插件。安装方法同安装其他插件的方式一样,推荐离线安装,方法这里不再赘述。 在使用NDK之前需要下载android-ndk包,下载解压后将解压后的文件夹拷贝到自定义的目录下面(如“/roo
2012-04-05 16:35:40
28280
1
原创 离线安装ADT+AVD
离线安装ADT+AVD一 eclipse安装ADT插件 从网上下载的eclipse默认没有ADT插件,如果需要开发android程序,则需要自己安装这个插件。最简单的方法是在eclipse当中选择“help-->install new software“,在出现的”work with“窗口中输入:http://dl-ssl.google.com/Android/eclipse即可。但
2012-04-05 16:31:05
9670
原创 JDK+Eclipse环境搭建
<!--@page {margin:2cm}h1 {margin-top:0.6cm; margin-bottom:0.58cm; line-height:241%}h1.western {font-family:"DejaVu Serif",serif; font-size:22pt}h1.cjk {font-family:"DejaVu Sans";
2012-03-30 09:33:49
2585
免费共享mac charles 3.10.1破解文件
2015-06-22
ode-0.11.1引擎及在vs2008和vs2005下的demo程序及其API文档
2011-12-22
ISE的Block_Ram的设计流程(附xilinx block memory datasheet)
2011-04-26
MyEclipse使用教程
2010-06-14
MSP430寄存器配置指导
2010-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人