Android读书笔记(一)Activity退出时释放内存
2016-04-26 19:45
477 查看
最近一直在写自己的音乐播放器,作为菜鸟来说着实有些东西没弄明白,这时候习惯性的百度,然后耗费大量的时间来检索信息,编写代码效率极低。因此,希望能够通过自己写博客来记录一下Android学习过程中遇到的问题以及基本知识点的总结,为日后进一步的学习和工作打下基础。废话不多说,让我开始吧。
今天下午一直在调试Activity退出后内存没有被释放,再次进入后会重新创建一些对象导致耗费的内存增加,具体的代码主要是为了实现通过BindService获取音乐播放进度,并根据进度更新音乐主UI上进度条和歌词显示,在这里我采用了Timer和TimerTask来实现不间断的更新,但是由于对Android的多线程理解不够深入导致在Activity终止后,并没有及时的将Timer取消掉,以至于原有的Activity占用的内存不能被JavaGC回收掉,导致每次退出后再进入Activity都会产生内存泄漏问题。经过自己的实验,在Activity中的onDestory()
方法中调用mTimer.cancle();即可解决问题,同时在onDestory() 方法中还需要调用unbindService(sc)来解除绑定,以及handler.removeCallbacks(runable);实现handler的终止。从而极大的改善的应用内存问题 同时附上释放ImageView 、TextView所占用的资源 private void releaseImageView(ImageView imageView) {
Drawable d = imageView.getDrawable();
if (d != null)
d.setCallback(null);
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
}
今天下午一直在调试Activity退出后内存没有被释放,再次进入后会重新创建一些对象导致耗费的内存增加,具体的代码主要是为了实现通过BindService获取音乐播放进度,并根据进度更新音乐主UI上进度条和歌词显示,在这里我采用了Timer和TimerTask来实现不间断的更新,但是由于对Android的多线程理解不够深入导致在Activity终止后,并没有及时的将Timer取消掉,以至于原有的Activity占用的内存不能被JavaGC回收掉,导致每次退出后再进入Activity都会产生内存泄漏问题。经过自己的实验,在Activity中的onDestory()
方法中调用mTimer.cancle();即可解决问题,同时在onDestory() 方法中还需要调用unbindService(sc)来解除绑定,以及handler.removeCallbacks(runable);实现handler的终止。从而极大的改善的应用内存问题 同时附上释放ImageView 、TextView所占用的资源 private void releaseImageView(ImageView imageView) {
Drawable d = imageView.getDrawable();
if (d != null)
d.setCallback(null);
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories