作为Android开发者,最头疼是什么?相信大家会异口同声的说Bug!的确,这些是避免不了的同时也是最烦人,调Bug,改Bug,一个项目做完,剩下的几乎全是Bug的调试,有的公司很可能在项目上线前还有改不完的Bug,针对这些困扰Android开发者的种种难题,整理出了这些难题或是Bug的解决方案,希望能给大家带来帮助。

头条推荐

Android开发常见错误汇总

大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合,分享给大家,希望在以后的开发中能够避免错误的再次出现。……>>详细

Android错误解决方法大集合

1 android java.net.UnknownHostException: Unable to resolve host "...": No address associated 错误
我在android开发的时候经常会遇到这个错误,一般来说,造成这种错误的最普遍情况有两种:

1.android设备网络连接没打开,例如3G网络和WIFI网络

所以,如果遇到这种错误时,请先查看网络是否已正常连接.

2.Manifest文件没有标明网络访问权限

阅读全文

Android内存溢出分析

OOM(内存溢出)和Memory Leak(内存泄露)有什么关系?

OOM可能是因为Memory Leak,也可能是你的应用本身就比较耗内存(比如图片浏览型的,或者应用本身的设计有问题)。所以,出现OOM不一定是Memory Leak。

同样,Memory Leak也不一定就会导致OOM,如果泄露的速度很慢,可能还没用完可用内存应用就被重启了,那就不会OOM咯。当然了,有bug解决了最好。

什么是shallow heap与retained heap?

shallow heap:你自身占了多少内存,比如你有一个int属性,就占4字节。不包括你引用的其他对象。

阅读全文

Android内存泄漏的各种原因详解

1.资源对象没关闭造成的内存泄漏

描述:

资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们,以便它们的缓冲及时回收内存。它们的缓冲不仅存在于 java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄漏。因为有些资源性对象,比如 SQLiteCursor(在析构函数finalize(),如果我们没有关闭它,它自己会调close()关闭),如果我们没有关闭它,系统在回收它时也会关闭它,但是这样的效率太低了。因此对于资源性对象在不使用的时候,应该调用它的close()函数,将其关闭掉,然后才置为null.在我们的程序退出时一定要确保我们的资源性对象已经关闭。

程序中经常会进行查询数据库的操作,但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小,对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险。

阅读全文

Android adb常见问题整理

问题1

[java] view plaincopyprint?

The connection to adb is down, and a severe error has occured.

You must restart adb and Eclipse.

阅读全文

Android SDK更新以及ADT更新出现问题的解决办法

问题描述

使用SDK Manager更新时出现问题

Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xml, reason: Connection to https://dl-ssl.google.com refused

Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml, reason: Connection to http://dl-ssl.google.com refused

阅读全文

android开发图片分辨率问题解决方案

dpi是什么呢?

dpi是“dot per inch”的缩写,每英寸像素数。
四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。

dpi计算公式
DPI=对角线的像素值/尺寸

手机屏幕分辨率和屏幕密度是两码事!并不是800*480的分辨率手机图片就应该放在hdpi文件夹中。5.0英寸 800*480属于mdpi

也可以通过代码获取:

阅读全文

Android高效加载大图、多图解决方案,有效避免程序OOM

比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多。大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。

我们可以通过下面的代码看出每个应用程序最高可用内存是多少。

  1. int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);   
  2. Log.d("TAG""Max memory is " + maxMemory + "KB"); 
  3.   

因此在展示高分辨率图片的时候,最好先将图片进行压缩。压缩后的图片大小应该和用来展示它的控件大小相近,在一个很小的ImageView上显示一张超大的图片不会带来任何视觉上的好处,但却会占用我们相当多宝贵的内存,而且在性能上还可能会带来负面影响。下面我们就来看一看,如何对一张大图片进行适当的压缩,让它能够以最佳大小显示的同时,还能防止OOM的出现。

BitmapFactory这个类提供了多个解析方法(decodeByteArray, decodeFile, decodeResource等)用于创建Bitmap对象,我们应该根据图片的来源选择合适的方法。比如SD卡中的图片可以使用decodeFile方法,网络上的图片可以使用decodeStream方法,资源文件中的图片可以使用decodeResource方法。这些方法会尝试为已经构建的bitmap分配内存,这时就会很容易导致OOM出现。为此每一种解析方法都提供了一个可选的BitmapFactory.Options参数,将这个参数的inJustDecodeBounds属性设置为true就可以让解析方法禁止为bitmap分配内存,返回值也不再是一个Bitmap对象,而是null。虽然Bitmap是null了,但是BitmapFactory.Options的outWidth、outHeight和outMimeType属性都会被赋值。这个技巧让我们可以在加载图片之前就获取到图片的长宽值和MIME类型,从而根据情况对图片进行压缩。如下代码所示:

阅读全文

Android开发中如何解决加载大图片时内存溢出的问题

 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。

如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常,另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。

另外,以下方式也大有帮助:

阅读全文

Android 解决图片大量下载:软引用必须懂4点

1.对象的强、软、弱和虚引用

为了能更加灵活控制对象的生命周期,需要知道对象引用的4中级别,由高到低依次为 :强引用、软引用、弱引用和虚引用

备注: 这四种的区别:

⑴强引用(StrongReference)

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

阅读全文

10 关于多任务下载问题

Android系统以不同寻常的方式处理多个应用程序的同时运行。来自于其它不同平台的开发者或许会对这样的运行机制感到很奇怪。而理解Android多任务的运行,对于设计出可以良好运行的应用程序,以及与Android平台的其它部分进行无缝结合都具有重要意义。这篇文章说明了Android的多任务方式设计上的成因,它对应用程序运行产生的影响,还有你可以怎样更好地利用Android的这一特性。

近期项目中,遇到一个问题,列表数据中的图片地址是一个需要下载JS再解析的字段,之前的图片下载是一个异步的过程,由一个队列处理。

 

 

阅读全文

Android其它相关难题

Android现在出现了什么症状
Nielsen最近的研究数据表明,Android系统的设备已经在数量上超过iOS系统了…
Android清除本地数据缓存代
Android 如何实现垃圾清理、缓存清理?要删除什么哪些文件或者要怎么做?这…
Android中R文件的丢失问题
作为Android开发程序员,我们经常会遇到项目中R文件的丢失问题,大部分情况…
Android开发中设置EditText
默认EditText在获得焦点时,会弹出软键盘,如果想实现当EditText获得焦点时…
android 4.0以上WebView不能
上次鄙人做了一个简单的利用webView实现的一个浏览器!其中遇到了两个问题…
Android 解决图片大量下载:
可能对于Android开发者来说,软引用这个词有的会不是很熟悉,软引用在Java…
关于AsyncTask中的cancel方
在adroid 应用程序中,我们经常会用到异步加载。 所以我们也要知道如何取消…
安装Android Studio及无法启
想学习Android编程应该有一年时间了...一直没有真的去做,应该就在几天前吧…

投    票

你在Android开发过程中,遇到哪类问题最多?
多线程方面
屏幕的分辨率
网络通信相关
Socket管理
UI和IO方面

专题推荐

作为Android开发者,最头疼是什么?相信大家会异口同声的说Bug!的确,这些是避免不了的同时也是最烦人,调
Android开发常见“疑难杂症
作为Android开发者,最头疼是什么?相信大家会异口同声的说Bug!的确,这些是避...
谷歌在新品发布会上正式发布了传闻已久的Android 4.3 Jelly Bean更新。从命名可以知道,它是对当前Android
全方位剖析 Android 4.3
谷歌在新品发布会上正式发布了传闻已久的Android 4.3 Jelly Bean更新。从命名可...
作为Android开发者,我们都离不开Android模拟器来运行我们项目,当然,你可能会说用手机测试不是很好吗,干
Android模拟器的“神话” -
作为Android开发者,我们都离不开Android模拟器来运行我们项目,当然,你可能会...
作为Android开发人员,在开发项目的过程中,我们往往会遇到各种各样的难题,针对出现的这些问题,我们将整
Android各类顶级资源集锦
作为Android开发人员,在开发项目的过程中,我们往往会遇到各种各样的难题,针...

一周排行

留言评论