不知道大家对android内存释放都做什么样的处理,本人接触android不久,最近开发小游戏的过程中,因为游戏界面组件较多,刚玩游戏的时候感觉还好,但是反复进入游戏界面玩几次之后,游戏就会卡顿,我瞬间就无语了,想来想去,还是内存占用没有得到释放,经过一番学习,虽然没有完全找到根源,但是已经缓解了很多,在这里说说我是怎么处理的吧,然后要是大家有自己好的处理方法,希望可以拿出来分享,这样大家就能一起进步了。接下来是我的一些做法:
首先,大多数占用内存的东西我知道的有(一般释放资源我都在onDestroy()里面做处理):
1.图片资源;
2.list占用;
3.数组占用;
4.其他一些定义的方法的占用;
5.线程回调,线程没有关闭问题。
面对这些问题,我分别采用的方法是:
1.图片资源回收
private void recycleBitmap( )
{
if(viewGroup != null)
{
int count = viewGroup.getChildCount;
for(int i=0; i <count; i++ )
{
View view = viewGroup.getChildAt(i);
ImageView img = (ImageView)view.findViewById(R.id.Image);
if(img != null)
{
Drawable drawable = img.getDrawable( );
if(drawable != null)
{
if(drawable instanceof BitmapDrawable)
{
BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;
Bitmap bitmap = bitmapDrawable.getBitmap( );
if(bitmap != null)
bitmap.recycle( );
}
}
}
}
}
}
2.list占用:
方法:list.clear();然后在制空,不知道有没有这个必要,但是也就一句话,而且也没有异常,所以就顺便了;
3.数组占用:
方法:用完之后没有用了就制空;
4.其他一些定义的方法的占用:
方法:直接制空,如果方法内部有一些list或者数组之类的,我的处理方法是在定义的方法里面再定义一个释放资源的方法,然后在要释放资源的时候调用那个方法释放方法内部数据,在对其制空;
5.线程回调,线程没有关闭问题:
方法:移除回调mHandler.removeCallbacks(mMethod);