Android学习小Demo(12)TodoList实现ListView的分组实现

 很多情况下, 我们想要ListView上面展示的东西是可以分组的,比如联系人列表,国家列表啊,这样看起来数据的展现比较有层次感,而且也有助于我们快速定位到某一个具体的条目上,具体效果请看下图: 这是前面TodoList小demo的MainActivity,主要是来展现用户添加的任务的,在原来的基础上添加了分组的效果。 接下来我们具体来讲一下这个效果是怎么实现的。 这是利用开源库StickyListHeaders(传送门:https://github.com/emilsjolander/StickyListHeaders)来实现的,这个实现的效果是基于ListView的,而其实也有关于GridView而实现的分组的效果,大家可以参考一下xiaanming的博客(他的文章名字都很长。。。): Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果 0)关于如何导进开源库,大家请参考:如何导进开源库StickyListHeaders 1)然后,我们要想清楚一件事情,即分组的ListView,是包含两部分:Header 和 Item,所以相对应的我们也要为其定义两个Layout,如下: 1.1)task_header.xml **[html]** [view plain](http://blog.csdn.net/linmiansheng/article/details/20747775#)[copy](http://blog.csdn.net/linmiansheng/article/details/20747775#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/224769)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/224769/fork) <div> <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1"> </embed> </div> </div> - <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">&#8220;1.0&#8221;</span> <span class="attribute">encoding</span>=<span class="attribute-value">&#8220;utf-8&#8221;</span><span class="tag">?></span> - <span class="tag"><</span><span class="tag-name">RelativeLayout</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">&#8220;http://schemas.android.com/apk/res/android&#8221;</span> - <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;match_parent&#8221;</span> - <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;match_parent&#8221;</span> - <span class="attribute">android:background</span>=<span class="attribute-value">&#8220;@drawable/header_selector&#8221;</span> <span class="tag">></span> - - <span class="tag"><</span><span class="tag-name">TextView</span> - <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/tvHeader&#8221;</span> - <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span> - <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;match_parent&#8221;</span> - <span class="attribute">android:layout_gravity</span>=<span class="attribute-value">&#8220;start|left&#8221;</span> - <span class="attribute">android:padding</span>=<span class="attribute-value">&#8220;5dp&#8221;</span> - <span class="attribute">android:textColor</span>=<span class="attribute-value">&#8220;@android:color/white&#8221;</span> - <span class="attribute">android:textSize</span>=<span class="attribute-value">&#8220;17sp&#8221;</span> - <span class="attribute">android:textStyle</span>=<span class="attribute-value">&#8220;bold&#8221;</span> <span class="tag">/></span> - - <span class="tag"></</span><span class="tag-name">RelativeLayout</span><span class="tag">></span> 因为我们在Header上面只是展现一个日期,所以我们只需要一个TextView即可。 ...

2015年1月20日 · 7 分钟 · 天边的星星

AndroidNDK开发环境介绍

AndroidNDK开发环境介绍 一.系统和软件需求 1.AndroidSDK 一个完整的Android SDK安装(包括所有附件)是必需的 Android 1.5 以上SDK 2.支持的操作系统 Windows XP (32-bit) or Vista (32- or 64-bit) Mac OS X 10.4.8 or later (x86 only) Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or later) 3.需要的开发工具 所有开发平台都需要GNU Make3.81以上版本 需要最新版本的AWK( GNU Awk 或者Nawk) 对于Windows,需要Cygwin 1.7以上的版本(注意:Cygwin1.5是不行的) 4.Android平台兼容性 创建的本地库Android NDK只能运行特定的最低设备使用Android平台版本,平台所需的最低版本取决于您的目标设备的CPU架构。 下面的表细节的Android平台版本兼容本地代码开发特定的CPU架构。 CPU架构 兼容的平台 ARM, ARM-NEON Android 1.5 以上 x86 Android 2.3 以上 MIPS Android 2.3 以上 为了保证平台兼容性需要设置的android:minSdkVersion 例如 NDK使用OpenGL ES APIs,为了确保平台的兼容性,需要设置的android:minSdkVersion 下面给出对应关系 OpenGL ES 版本 兼容平台 需要的最小SDK OpenGL ES 1.1 Android 1.6 以上 android:minSdkVersion=”4″ OpenGL ES 2.0 Android 2.0 以上 android:minSdkVersion=”5″ 另外一个应用使用OpenGL ES,在manifest文件中应该声明的 android:glEsVersion(OpenGL的最小版本) 例如 NDK中使用API访问Bitmap相关操作,需要设置Android的最小SDK为8. 英文原文 If you use this NDK to create a native library that uses the API to access Android Bitmap pixel buffers or utilizes native activities, the application containing the library can be deployed only to devices running Android 2.2 (API level 8) or higher. To ensure compatibility, make sure that your application declares attribute value in its manifest. ...

2015年1月8日 · 2 分钟 · 天边的星星

Android 开发 之 JNI入门 – NDK从入门到精通

NDK项目源码地址 : — 第一个JNI示例程序下载 : GitHub – https://github.com/han1202012/NDKHelloworld.git — Java传递参数给C语言实例程序 : GitHub – https://github.com/han1202012/NDKParameterPassing.git —C语言回调Java方法示例程序 : GitHub – https://github.com/han1202012/NDK_Callback.git —分析Log框架层JNI源码所需的Android底层文件 : CSDN – http://download.csdn.net/detail/han1202012/6905507 开发环境介绍 : — eclipse : adt-bundle-windows-x86-20130917 — sdk : 版本 2.3.3 — ndk : android-ndk-r9c-windows-x86.zip — cygwin : 所需组件 binutils , gcc , gcc-mingw , gdb , make; — javah : jdk6.0自带工具 — javap : jdk6.0自带工具 **JNI 总结 : ** Java 调用 C 流程 : — a. 定义 Native 方法 : 在 shuliang.han.ndkparameterpassing.DataProvider.java 类中定义 Native 方法 public native int add(int x, int y); ...

2015年1月8日 · 62 分钟 · 天边的星星

Android NDK开发(一)——环境搭建

Android下的NDK开发是Android开发中不可或缺的一部分,通过Google提供的NDK套件,我们可以使用JNI这座桥梁在Java和C/C++之间建立联系(互相调用)。那么,为什么在Android开发中需要了解NDK开发呢?诚然,这些原因有很多说法,在我总结来是这样的。C/C++是比Java还要古老的编程语言,由于其古老的特性,导致早期有很多优秀的类库出现,譬如处理视频编解码的FFMPEG类库,这些复杂的类库早就被C/C++编写过,我们在处理视频编解码的时候没必要重复“造轮子”,所以能直接拿来用的就直接拿来用,但是这个直接法很难做到,因为Java的编译环境的原理跟C/C++的不同,所以就必须找个中间者为Java和C/C++代码建立关系,这个中间者就是JNI。还有一个重要的原因就是效率问题,Java是跨平台的语言,在不同的平台有不同的JVM实现,Java源码需要首先编译成.class文件,然后让.class文件运行在不同的JVM解释执行上,这样的步骤造成了效率的浪费,而不同的是C/C++,可以直接编译成特定平台的二进制文件,直接运行在特定平台上,效率比Java高效很多,所以在某些特定的环境下,还是需要使用C/C++来解决效率问题,Java只负责处理C/C++返回来的结果就可以,这样的话Java和C/C++互调就显得相当重要了。 做NDK开发前最好需要了解一下C/C++的语法,通常这部分的代码不需要Android程序员编写,但是Android程序员最好能看懂C/C++源码,这样做会事半功倍一点,关于C/C++语法的学习不是这里的重点,大家感兴趣的话可以直接找资料学习,请从柜底抽出大学教材《C语言程序设计——谭浩强》,拍拍上面的灰尘,随便过一遍^.^ 一、明确一些基本概念 1,JNI Java Native Interface Java 本地开发的接口。JNI 是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++)。通过这个协议,java代码就可以调用外部的c/c++代码,外部的c/c++代码也可以调用java代码。 2,CDT C/C++ Develop tools,C/C++开发工具。是Eclipse上的一个插件,主要是让C/C++代码能够高亮显示。这个组件不是必要的,除非你是C/C++高手,喜欢在记事本上写代码,对于一般的程序员还是装一下吧,高亮显示很重要的。 3,NDK Native Develop Kits,本地开发套件。这个套件是非常重要的,是Google提供给我们的一个在Android上开发JNI程序的工具集,有了它会使得开发高效的多。 4,cygwin Windows下的Linux模拟器。大家知道Android是基于Linux内核的操作系统,所以在编译C/C++源码的使用得使用Linux环境,将其编译成Linux特定平台的文件.so或者.a。好消息是,NDK高版本中提供了Windows下开发套件的支持,cygwin可以不使用,直接在Windows下平台编译也是可行的,但是为了显示学习,最好还是需要了解一点的。 二、NDK环境搭建 1,安装CDT 如果是使用的是从Android Develop官网上下载的集成了ADT一整套的IDE的话,请跳过这一步,因为ADT中已经集成好了CDT插件,直接使用就可以了。如果使用的是传统的Eclipse自装插件的方式的话,有两种方式可供安装CDT。 (1)下载CDT插件进行安装。在Eclipse社区官网可以找到下载链接[https://eclipse.org/cdt/](https://eclipse.org/cdt/)。 (2)在线安装。步骤如下: ![](http://img.blog.csdn.net/20141208123341295?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 选择 Helios- http://download.eclipse.org/release/helios ,等待展开,选择Programing language![](http://img.blog.csdn.net/20141208123356255?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 选择c/c++ 开发工具 ![](http://img.blog.csdn.net/20141208123530245?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 一路next下去,同意licenses。 安装成功会提示是不是确认重启eclipse,重启就完成安装。 2,安装cygwin NDK需要运行在linux环境下,cygwin是windows下模拟linux的一个工具。Cygwin是一个程序,支持很多插件。可以去cygwin的官网上下载[http://www.cygwin.com/](http://www.cygwin.com/)双击安装,也可以从CSDN资源页上下载我上传的资料包,里面包含cygwin的安装程序和安装包,地址是:[**http://download.csdn.net/detail/lee_tianya/8235323**](http://download.csdn.net/detail/lee_tianya/8235323) ![](http://img.blog.csdn.net/20141208123919847?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 选择安装方式请注意了,一般可以选择从Internet上在线安装,不过速度很慢,而且中途不能断开,如果网速不好中途断开了,那么就必须从头开始下载,非常不舒服。第二种方式是本地安装,先下载好安装所需要的文件放在本地磁盘上,然后选择安装目录即可,我这里是本地安装。 ![](http://img.blog.csdn.net/20141208124337699?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 选择安装目录的时候请注意:安装目录不可以出现空格,最好不要出现中文等非英文字符。 ![](http://img.blog.csdn.net/20141208124346984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) ![](http://img.blog.csdn.net/20141208125609296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) ![](http://img.blog.csdn.net/20141208124405530?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) ![](http://img.blog.csdn.net/20141208124412300?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 安装完毕后 ,桌面会出现一个快捷图标,双击快捷小图标,打开cygwin。 首先程序会初始化 ![](http://img.blog.csdn.net/20141208130726968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 敲入命令 Make –v ![](http://img.blog.csdn.net/20141208130742387?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 显示出来 GNU Make 的版本 ,说明我们的cygwin模拟的linux编译环境 模拟成功了. 3,安装NDK 首先翻墙上Google Android Develop的官网去下载NDK,地址是**[http://developer.android.com/tools/sdk/ndk/index.html](http://developer.android.com/tools/sdk/ndk/index.html)** **![](http://img.blog.csdn.net/20141208131837421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxsZW4zMTU0MTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) ** ...

2015年1月8日 · 1 分钟 · 天边的星星

圆形进度(ProgressWheel)

This is a custom component for Android intended for use instead of a progress bar. {#user-content-a-complete-walkthrough-of-how-to-use-this-component-in-your-app.anchor}A complete walkthrough of how to use this component in your app XML: To implement the view in your xml layout do the following: Add the following to your attrs.xml file (in res/values): ``` <declare-styleable name="ProgressWheel"> <attr name="text" format="string" /> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="barColor" format="color" /> <attr name="rimColor" format="color" /> <attr name="rimWidth" format="dimension" /> <attr name="spinSpeed" format="integer" /> <attr name="circleColor" format="color" /> <attr name="radius" format="dimension" /> <attr name="barWidth" format="dimension" /> <attr name="barLength" format="dimension" /> <attr name="delayMillis" format="dimension"/> <attr name="contourColor" format="color"/> <attr name="contourSize" format="float"/> </declare-styleable> ``` Add the following code to the root view of your layout:xmlns:ProgressWheel="http://schemas.android.com/apk/res/com.visualdenim.schooltraq" ...

2015年1月6日 · 2 分钟 · 天边的星星

Android应用如何监听自己是否被卸载及卸载反馈功能的实现

一个应用被用户卸载肯定是有理由的,而开发者却未必能得知这一重要的理由,毕竟用户很少会主动反馈建议,多半就是用得不爽就卸,如果能在被卸载后获取到用户的一些反馈,那对开发者进一步改进应用是非常有利的。目前据我所知,国内的Android应用中实现这一功能的只有360手机卫士、360平板卫士,那么如何实现这一功能的? 我们可以把实现卸载反馈的问题转化为监听自己是否被卸载,只有得知自己被卸载,才可以设计相应的反馈处理流程。以下的列表是我在研究这一问题的思路: 1,注册BroadcastReceiver,监听&#8221;android.intent.action.PACKAGE_REMOVED&#8221;系统广播 结果:NO。未写代码,直接分析,卸载的第一步就是退出当前应用的主进程,而此广播是在已经卸载完成后才发出的,此时主进程都没有了,去哪onReceive()呢? 2,若能收到&#8221;将要卸载XX包&#8221;的系统广播,在主进程被退出之前就抢先进行反馈处理就好了,可惜没有这样的系统广播,不过经过调研,倒是发现了一个办法,读取系统log,当日志中包含&#8221;android.intent.action.DELETE&#8221;和自己的包名时,意味着自己将要被卸载。 结果:NO。调试时发现此方法有两个缺陷,(1)点击设置中的卸载按钮即发出此Intent,此时用户尚未在弹框中确认卸载;(2)pm命令卸载不出发此Intent,意味着被诸如手机安全管家,豌豆荚等软件卸载时,无法提前得知卸载意图。 3,由于时间点不容易把控,所以干脆不依赖系统广播或log,考虑到卸载过程会删除&#8221;/data/data/包名&#8221;目录,我们可以用线程直接轮询这个目录是否存在,以此为依据判断自己是否被卸载。 结果:NO。同方法1,主进程退出,相应的线程必定退出,线程还没等到判断目录是否存在就已经被销毁了。 4,改用C端进程轮询&#8221;/data/data/包名&#8221;目录是否存在 结果:YES。借助Java端进程fork出来的C端进程在应用被卸载后不会被销毁。 OK,上代码! Activity启动时fork出C端进程轮询目录: ![复制代码](http://common.cnblogs.com/images/copycode.gif) ``` 1 package main.activity; 2 3 import pym.test.uninstalledmoniter.R; 4 import android.app.Activity; 5 import android.os.Bundle; 6 import android.util.Log; 7 8 /** 9 * @author pengyiming 10 * @note 监听此应用是否被卸载,若被卸载则弹出卸载反馈 11 * 12 / 13 14 public class UninstalledMoniterActivity extends Activity 15 { 16 / 数据段begin / 17 private static final String TAG = “UninstalledMoniterActivity”; 18 / 数据段end / 19 20 / 函数段begin / 21 private native void init(); 22 static 23 { 24 Log.d(TAG, “load libuninstalled_moniter”); 25 System.loadLibrary(“uninstalled_moniter”); 26 } 27 28 @Override 29 public void onCreate(Bundle savedInstanceState) 30 { 31 super.onCreate(savedInstanceState); 32 Log.d(TAG, “onCreate”); 33 34 setContentView(R.layout.uninstalled_moniter_layout); 35 36 init(); 37 } 38 / 函数段end */ 39 } ...

2015年1月6日 · 7 分钟 · 天边的星星

android 链接mysql数据库

android下可以连接远程数据的,不过你远程的数据库服务的要开启远程,具体设置[http://www.ways2u.com/knowledge/?post=142](http://www.ways2u.com/knowledge/?post=142) Java利用JDBC访问数据库的编程步骤 http://www.ways2u.com/?post=76 android 链接mysql数据库实例: package com.hl; import java.sql.DriverManager; import java.sql.ResultSet; import com.mysql.jdbc.Connection; import com.mysql.jdbc.Statement; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class AndroidMsql extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn=(Button)findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sqlCon(); } }); } private void mSetText(String str){ TextView txt=(TextView)findViewById(R.id.txt); txt.setText(str); } ...

2015年1月6日 · 1 分钟 · 天边的星星

10大优秀的移动Web应用程序开发框架推荐

在最近几年里,移动互联网高速发展、市场潜力巨大。继计算机、互联网之后,移动互联网正掀起第三次信息技术革命的浪潮,新技术、新应用不断涌现。今天这篇文章向大家推荐10大优秀的移动Web开发框架,帮助开发者更加高效的开发移动Web应用。 Sencha Touch Framework Sencha Touch 是世界上第一个基于 HTML5 的移动 Web 开发框架,支持最新的 HTML5 和 CSS3 标准,全面兼容 Android 和 Apple iOS 设备,提供了丰富的 WEB UI 组件,可以快速的开发出运行于移动终端的应用程序。 jQuery Mobile jQuery Mobile 框架把“write less, do more”精神提升到更高的层次。jQuery 移动框架可以帮助你设计一个可运行于所有流行智能手机和平板平台的应用程序,而不需要为每种移动终端都开发一个特别的版本。 jQTouch jQTouch 是一款 jQuery 的插件,用于手机上实现动画、列表导航、默认应用样式等各种常见UI效果。支持 iPhone、Android 等手机。 The M Project The-M-Project 是一个包含各种UI组件,基于 jQuery 开发 HTML5 应用程序的移动Web应用框架,支持 iOS、Android、Palm webOS和BlackBerry 等平台。 DHTMLX Touch – HTML5 JavaScript Framework for Mobile DHTMLX Touch 是一个基于 HTML5 的免费 JavaScript 库,用于构建跨平台的移动 Web 应用程序。这不只是一组UI部件,而是一个完整的框架,它允许你为手机等触摸设备创建强大的Web应用程序。 WebApp.Net WebApp.Net 提供了很多的 API,因此可以帮助你节省很多工作了。不需要花时间去进行 Ajax 调用的编码,因为已经内置了,另外还有很多其它内置功能,提供了详细的文档和应用演示。 ...

2015年1月2日 · 1 分钟 · 天边的星星

Android 图片的内存优化

在Android应用中,当对图片本身进行操作时,应该尽量不要是使用setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图,因为这些方法在完成Decode后,最终都是通过java层的createBitmap()方法来完成的,这需要消耗更多的内存。因此,应该先通过BitmapFractory.decodeStream方法创建出一个bitmap,然后再将其设置为imageview的source。decodeStream最大的优点是直接调用JNI–>nativeDecodeAsset()来完成decode,而不需要在使用java层的createBitmap,从而节省了java层的空间。如果在读取图片是加上图片的Config参数,可以更有效的减少加载的内存,从而更有效的阻止抛出内存溢出。另外decodeStream直接用图片来读取字节码,不会根据机器的各种分辨率来自动适应。当使用了decodeStream后,需要在hdpi和mdpi中配置相应的图片资源,否则在不同分辨率的机子上都是同样大小(像素点数量),显示出来的大小就不对了。 优化Dalvik虚拟机的堆内存分配。对Android平台来说,其托管层使用的时Dalvik Java VM,从目前的表现来看还有很多地方可以优化处理,比如在开发一些大型游戏或者耗资源的应用中可以考虑用手动干预GC处理,使用类dalvik.system.VMRuntime提供的setTargetHeapUtilization可以增强程序堆内存的处理效率。使用方法如下: private final static float TARGET_HEAP_UTILIZATION=0.75f; VMRuntime.getRuntime().setTargetHeapUtilazation(TARGET_HEAP_UTILIZATION); 另外还可以用如下方法定义堆内存的大小,这样就实现了优化功能。 private final static int CWJ_HEAP_SIZE=6*1024*1024; VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//设置Heap的最小内存6M。

2015年1月2日 · 1 分钟 · 天边的星星

Android内存泄露相关知识总结

在开发应用过程中,我们可以使用现成的工具来查看内存泄漏的情况。例如DDMS和MAT,MAT是Memory Analyzer Tool的缩写,MAT可以安装eclipse插件(更新地址http://download.eclipse.org/mat/1.4/update-site/),可以使用比插件方便的RCP(下载地址:http://www.eclipse.org/mat/downloads.php)。对于MAT的使用我们暂时不详细讲解,小伙伴们可以去(http://www.eclipse.org/mat/中查看Documentation中查看,里面还有blog可以看) 。 查看内容泄漏的方法步骤: 1.生成.hprof文件(使用DDMS生成,有必要的话,我给小伙伴录制一个视频讲解教程) 2.使用MAT导入.hprof文件 3.使用MAT的视图工具分析内存 备注:由于有文件保存,肯定会用到SD卡,用模拟器的小伙伴不要忘记创建SD卡和让测试应用有读写SD卡的权限。如果真的没有SD卡,小伙伴可以使用android.os.Debug中的方法手动指定.hprof的内存(不是运行时内存,指的是系统的内存存储)位置,例如 xxxButton.setOnclickListener(new View.OnClickListener(){ android.os.Debug.dumpHprofData(“/data/tem/XXX.hprof”);//文件路径可以是SD卡路径 });如果使用android.os.Debug.dumpHprofData()方法手动生成的.hprof文件,需要使用Android/Tools/ hprofconv xxx.hprof yyy.hprof把原来的xxx.hprof转换成yyy.hprof文件(这个文件才是MAT分析的文件)。 目前查看内存分析查找内存泄漏的方法还有以下几种 1.使用命令查看某个进程的内存。例如创建一个脚本文件xxx.sh.该文件的内容指定程序1秒钟输出某个进程的内存使用情况 代码如下 #!/bin/bash While true; do adb shell procrank | grep “进程名称” Sleep 1 done 2.使用Top命令查看内存 Adb shell top -m 10//查看使用资源最多的10个进程 Adb shell top|grep 进程名称 //查看指定进程的内存 3. free命令 Free命令用来显示内存使用情况,使用权限是所有用户。格式如下 Free [-b|-k|-m] [-o] [-s delay] [-t] [-v] 参数 -b/-k/-m表示以B、KB、MB为单位显示内存使用情况 参数 -s delay 显示每隔多少秒数来显示一次内存使用情况 参数 -t 显示内存总和列 参数 -o 不显示缓冲区调节列 Android 为应用进程分配的内存上限保存在ANDROID_SOURCE/system/core/rootdir/init.rc脚本中。

2014年12月19日 · 1 分钟 · 天边的星星