- 博客(37)
- 收藏
- 关注
原创 内存泄漏缘由以及解决方案
内存泄漏缘由以及解决方案 > 1. 传统的内存泄漏是由忘记释放分配的内存导致的,而逻辑上的内存泄漏则是由于忘记对象不再被使用的时候释放对其的引用导致的 如果一个对象仍存在强引用,GC就无法对其进行回收. 2. 安卓平台,泄漏Context对象问题尤其严重,这是因为像Activity这样的Context对象会引用大量很占内存的对象,如View的层级以及其他资源, 如果Con
2017-10-09 18:17:23
428
原创 播放短促提示音的最佳办法
第一篇 播放短促的声音需求描述: 在Android中播放声音,可能大部分人想到的都是MediaPlayer,但是该类会占用大量的系统资源,播放时还需要缓冲,存在较大的延迟,因此 短促游戏音效没法用这个去实现,系统提供一个类来完成这一个工作:SoudPool SoudPool设计的初衷就是用于无延时地播放游戏中的短促音效,因此实际开发中,使用该类声音资源不要超过7s,否则可能加载失败或
2017-10-09 18:16:34
635
原创 viewpager踩坑记录
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308
2017-10-09 18:14:06
869
原创 selector踩坑记
第一篇 给按钮设置点击效果selector无效现象描述: selector设置,android:state_pressed="true"不生效 解决方法: 将pressed状态的item放在第一行(坑)
2017-10-09 18:13:20
324
原创 ImageView的使用小手段
将ImageView的图片置空 /** * If this view doesn't do any drawing on its own, set this flag to * allow further optimizations. By default, this flag is not set on * View, but could be set on
2017-10-09 18:12:54
232
原创 Gradle加速编译
###调整gradle配置开启daemon相比没有开启daemon,开启daemon有如下好处不需要每次启动gradle进程(JVM实例),减少了初始化相关的工作daemon可以缓存项目结构,文件,task等,尽可能复用之前的编译成果,缩短编译过程开启daemon很简单,以Mac为例,在家目录下的.gradle/gradle.properties文件(如没有,可需要新建文件),加上如下的代码即可
2017-10-09 18:11:57
4186
原创 Git使用小结
1.文件权限的变更导致Git的变动 在之前把开发环境由Windows转入Ubuntu之后,发现一个特别奇怪的问题, 就是AndroidStudio的文件经常改着改着突然所有的文件都出现了改动 仔细对比你会发现没有什么代码改动,这次无意中发现,是因为git对文件权限的改动也做了记录 //配置git忽视权限的变动<毕竟文件权限不是我们关心的改变>$ git co
2017-10-09 18:08:38
274
原创 Bitmap解图质量偏低
第一篇 Bitmap加载图片便绿,画质偏低现象描述: Bitmap.decodeXXX(),解出的图片偏绿色,质量偏低解决方法: 一般都是图片解码的时候压缩导致的,Bitmap在解码的时候可以配置一系列参数,其中有一些配置会对我们有帮助,inPreferQualityOverSpeed API24之后被废弃,即24之后,默认解图为高质量,24之前如果设置为true,也可以解出
2017-10-09 18:03:17
739
原创 查询数据库的图片并且按照相册分组,其中包括全部图片
public static class BucketInfo{//一个相册对象 public int bucket_id; public String bucket_display_name; public String thumb_data; public int count; public List<PhotoInf
2017-10-09 18:02:26
524
原创 Android模糊一张图片的简单方法之RenderScript
RenderScript是一种基于异构平台,高效计算的强大工具,尤其擅长图像,音频处理以及复杂的科学计算。RenderScript包括一个内核(kernel)编写语言和一组Java SDK。内核语言的语法类似C99标准,google为kernel提供了运行环境以及“标准库”。标准库主要提供了数学计算,向量/矩阵计算,以及一些OpenGL的功能(在4.2上已经被舍弃了),和log(调试用)。Java
2017-10-09 18:01:35
343
原创 加入C代码之后编译失败compileReleaseNDK
Execution failed for task ‘:stickerview:compileReleaseNdk’. Error: Your project contains C++ files but it is not using a supported native build system. Consider using CMake or ndk-build integrat
2017-04-27 10:54:20
562
原创 最简单的分享代码(多张图片)
//分享多张图片出去private void shareToTimeLine(String title, ArrayList<Uri> uris) { Intent intent= new Intent(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType("
2017-02-28 16:06:31
559
原创 Glide之Notification的相爱相杀
第五篇 Glide为通知栏(Notification设置图片不生效)现象描述:就是很正常Glide加载bitmap,设置给Remoteview结果不生效(bug代码)//********错误代码************ SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>() { @O
2017-02-17 16:00:59
685
1
原创 selector踩坑记
selector踩坑全集第一篇 给按钮设置点击效果selector现象描述: selector设置,android:state_pressed="true"不生效 解决方法: 将pressed状态的item放在第一行(坑)
2017-01-22 13:50:06
302
原创 Redex踩坑记
Redex踩坑全集第一步 安装Redex以下内容基本来自https://github.com/facebook/redex 1. 安装以下前置条件 sudo apt-get install \ g++ \ automake \ autoconf \ autoconf-archive \ libtool \ libboost-all-dev \
2017-01-20 18:00:30
829
原创 Glide踩坑记
Glide踩坑全集第一篇 Glide图片和默认图替换过程中,默认图被拉伸了一下现象描述: 今天遇到一个比较坑的问题,用Glide加载图片被拉伸了,找了半天才发现跟Glide设置占位图有关,如果占位图要比原图大, 图片就直接被拉伸了.以下为出问题的代码:Glide.with(mContext) .load(imgUrl) .placeholder(R.drawable
2017-01-10 13:51:11
4471
原创 ViewPager踩坑记
Glide的坑Glide设置默认图片,在获取到正确图片后,切换过程中,由于默认图合后面获取的图片大小不一致(我遇到的是我的图要比默认图要大,结果默认图片在过渡动画的时候,有一个被拉伸的过程,很渣的用户体验)解决方案: 调用dontAnimate()方法即可 Glide.with(context) .load(new File(imgList.get(positi
2017-01-07 14:08:26
392
原创 将Canvas的内容保存到本地
Bitmap bitmap = Bitmap.createBitmap(800, 600, Config.ARGB_8888); //将bitmap和画布绑定上 Canvas canvas = new Canvas(bitmap); //加载背景图片 Bitmap bmps = BitmapFactory.decodeResourc
2017-01-05 10:32:40
2774
原创 Android Java与JS的通信
近期,由于工作需求,我一个android程序猿确实被js虐了一把,先把这些坑记下来使用自带的 @JavaScriptInterface注解来完成两者之间的通讯新建一个类public class WebInterface { @JavascriptInterface public void toast(String msg) { Toast
2016-10-23 12:58:53
395
原创 String.xml Error:(2) Apostrophe not preceded by \ (in It 's said that
String.xml中 字符串资源报错Error:(2) Apostrophe not preceded by \ (in It 's said that解决方案:在’之前加入一个反斜杠,重新build即可
2016-10-10 16:11:26
378
原创 Launching app : The APK file xxxx.apk does not exist on disk Error while Installing APK
Launching app The APK file xxxx.apk does not exist on disk Error while Installing APK解决方案:打开Gradle面板,点击刷新按钮,重新build即可
2016-10-10 13:38:50
2814
原创 ViewDragHelper一个帮助你轻松完成滑动操作的辅助类
通过我们来处理自定义ViewGroup中子View滑动时,我们都是去通过事件拦截以及在onTouchEvent方法中进行手势判断,加速度检测等。在官方的V4提供了ViewDragHelper来帮助我们方便的编写自定义ViewGroup时处理子View的滑动等相关的操作处理代码演示
2016-03-25 17:18:34
644
翻译 由Dragger1浅析依赖注入
http://antonioleiva.com/dependency-injection-android-dagger-part-1/这篇博客最主要的目的是以Dragger为例子介绍一下DI(Denpendecy Injection 依赖注入)在Android应用的使用。这篇文章接着我的上一篇博客 Android中的MVP实践,我知道你们当中许多想试试Dragger融入其中会是怎样一幅场景。第一部分
2016-03-21 10:59:58
443
原创 OKHttp介绍和实例展示
OkHttp是现在当下比较流行的一个网络加载框架,可以使你在更加节约带宽的前提下高效的完成数据和媒体的传输特点 1.支持所有的请求共享同一个Socket 2.连接池减少了潜在的请求 3.明显的压缩了GZIP的下载大小 4.响应信息的缓存避免了又再去完全去重复请求我们直接看使用吧 >>>>>//先实例化一个OkHttpClientOkHttpClient client = new OkHtt
2016-03-16 16:53:23
584
原创 网络加载框架Retrofit使用介绍和实例展示
Retrofit 是Square开发的网络服务库 可以 将基于Http协议的API返回的返回的数据转化为Java对象方便操作来方便我们操作public interface NetService { @GET("server/{param}/api") //以Get 的方式 请求 url(server/{param}/api) >>>>注意这里的url一般来说并不是完整的url,而是全部url的
2016-03-16 15:06:49
1135
原创 RxJava学习笔记4
这里我们再来深入学习一下RxJava的线程调度,在RxJava学习笔记2中简单对RxJava中的线程调度进行了简单的使用介绍,这里我么继续深入线程调度在RxJava中的提现可以利用 subscribeOn() 结合 observeOn() 来实现线程控制,让事件的产生和消费发生在不同的线程。可是在了解了 map() flatMap() 等变换方法后,内部出现了不少的Obserable,自然会多出了不
2016-03-16 12:04:17
446
原创 RxJava学习笔记3
RxJava学习笔记2介绍了在RxJava中如何指定事件发生线程以及事件消费线程,只需要简单调用subscribeOn(XXXX) //发生线程observeOn(XXX) //指定消费线程这一篇我来学习一下RxJava中的核心原理 >>>>变换 就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列 ->看不懂没关系 我看都不看!!!!!map( ) 和 flatMap(
2016-03-15 16:40:46
351
原创 RxJava学习笔记2
上一篇RxJava学习笔记1只是介绍了RxJava最基本的使用方法,但是RxJava核心是异步,上篇所有的操作默认是在同一个线程中进行操作,下面我们介绍RxJava中一个比较核心的概念:Scheduler ->>>>>>用于线程调度 不指定线程的情况下, RxJava 原则是运行在同一个线程里,即:在调用 subscribe()的线程中,生产事件,消费事件。 如果需要指定线程,就需要用到 Sc
2016-03-15 15:54:41
337
原创 Android中WheelView代码分析笔记1(明天继续分析 >>>>>)
package com.guozg.wheelview.views;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.drawable.Drawable;
2016-03-15 15:33:16
2281
原创 一个ListView根据标识加载不同布局,很简单的例子,就是聊天界面,你说话在右边好友在左边怎么实现呢.
我不是一个标题党,我也是自己遇到了这个问题,想给后面的人一个快速解决的方法:1.我最开始的方法是通过将两个布局写在一个布局文件里, 通过显示和隐藏控件,来实现这样的效果,这样看起来重用的控件利用率高了呀,→_→,但是有时候控制的好揪心,难道就不能加载两个布局么,我来说一下尝试的方法2.加载两个布局,肯定没问题,你只需要传入一个标识,我在getView()方法里根据position拿到相应的数据,拿到
2016-03-13 13:47:42
1241
原创 RxJava学习笔记1
RxJava:Reactive ->响应式编程框架 整体采用观察者设计模式<被观察着Observable ,观察者(订阅者) Observer (Subscriber) >作用总结为:异步操作 观察者模式本身的目的就是『后台处理,前台回调』的异步机制优势:简洁<这里说的是使逻辑简单明了,并不是单纯的代码数量> 所有的复杂的逻辑都可以简化成一条链上的操作 这个稍后用代码来实际验证一下概念介绍: 既
2016-03-13 13:34:24
447
原创 Android中2D绘图笔记
graphics(具有绘制点、线、颜色、2D几何图形、图像处理等功能)包括 Canvas(画布) Paint(画笔) Color(颜色) Bitmap(图像)canvas提供了一系列的绘图方法 drawXXX( ) paint可以对画笔的属性进行各种设置 setXXX( )path类的几个相关方法moveto(float x,float y ) 将该路径移动到某一个坐标点,一般确定起
2016-01-20 10:24:19
354
原创 Android 运行到真机时 Error Tpye 3 ,{ } does not exist && SecurtyException Permission Denial
Error type 3: Activity Class {com.example.xxx} dose not exist解决方案一:.将build文件夹下的apk-debug.apk,手动安装到手机上,再运行Android Studio即可解决方案二:clean project;删除 build目录重启AndroidStudio好吧,我得承认,有时候以上方法根本解决不了,谁有终极办法
2016-01-12 13:30:51
586
原创 Android Studio实用插件推荐
1、ButterKnife Zelezny ButterKnife 注解生成器,使用起来非常简单方便,使用ButterKnife,可以很方便帮你省去写findViewById的无聊代码 2、Android Parcelable Code Generator Android中的序列化有两种方式,分别是实现Serializable接口和Parcelable接口,但在Android中是推荐使用Par
2016-01-12 10:33:29
354
原创 面试笔试之Java集合
ArrayList Vector LinkedListArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都容许直接序号索引元素,然则插入数据要设计到数组元素移动等内存操纵,所以索引数据快插入数据慢,Vector因为应用了synchronized办法(线程安全)所以机能上比ArrayList要差,
2015-10-20 19:10:38
252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人