CN106598614B - 一种回收图片资源的方法及装置 - Google Patents
一种回收图片资源的方法及装置 Download PDFInfo
- Publication number
- CN106598614B CN106598614B CN201611189937.3A CN201611189937A CN106598614B CN 106598614 B CN106598614 B CN 106598614B CN 201611189937 A CN201611189937 A CN 201611189937A CN 106598614 B CN106598614 B CN 106598614B
- Authority
- CN
- China
- Prior art keywords
- picture
- resource
- loading
- background
- bitmap
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 137
- 238000004064 recycling Methods 0.000 title claims abstract description 23
- 238000011068 loading method Methods 0.000 claims abstract description 206
- 238000004806 packaging method and process Methods 0.000 claims abstract description 47
- 238000011084 recovery Methods 0.000 claims abstract description 29
- 230000006835 compression Effects 0.000 claims description 24
- 238000007906 compression Methods 0.000 claims description 24
- 230000002159 abnormal effect Effects 0.000 claims description 6
- 230000005856 abnormality Effects 0.000 claims description 6
- 238000012217 deletion Methods 0.000 claims description 6
- 230000037430 deletion Effects 0.000 claims description 6
- 238000012856 packing Methods 0.000 claims 1
- 230000001960 triggered effect Effects 0.000 abstract description 7
- 230000000694 effects Effects 0.000 description 13
- 238000005538 encapsulation Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 241000282414 Homo sapiens Species 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明提供了一种回收图片资源的方法及装置,所述方法包括:将所述图片资源的回收程序封装至图片资源加载类中;为所述图片资源加载类封装一资源管理接口;按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源。如此,在加载过程中,当触发所述回收时机时,即可调用图片资源回收程序对无用的图片资源进行回收,确保了可以及时回收无用的图片资源,释放无用图片资源占用的内存,避免NativeCache内存不足,进而避免出现内存溢出OOM问题。
Description
技术领域
本发明属于资源加载技术领域,尤其涉及一种回收图片资源的方法及装置。
背景技术
随着电子产品的不断发展,智能终端基本上已经成为人手必备的电子产品。目前的主流终端(比如手机、平板电脑等)操作系统包括:Android系统和IOS系统。
图片加载功能是终端操作系统需要具备的基本功能,现有技术中,对于Android系统3.0版本之前的版本,在对图片资源进行加载时,通常利用系统默认的资源加载方法对图片进行加载,在加载过程中生成的位图像素数据一般是存在本地缓存NativeCache中的,但由于系统默认的加载方法对图片资源回收不可控,经常会因不能及时回收图片资源,造成NativeCache内存不足,进而导致内存溢出(OOM,Out Of Memory)。
发明内容
针对现有技术存在的问题,本发明实施例提供了一种加载图片资源的方法及装置,用于解决现有技术中Android系统3.0版本以下的版本,在加载图片资源时,无法对图片资源的回收进行控制,造成NativeCache内存不足,进而导致出现OOM的技术问题。
本发明公开了一种回收图片资源的方法,所述方法包括:
将所述图片资源的回收程序封装至图片资源加载类中;
为所述图片资源加载类封装一资源管理接口;
按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源。
上述方案中,按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源之前,所述方法还包括:建立位图集合,将加载过程中生成的位图像素数据储存至所述位图集合中。
上述方案中,所述回收时机具体为界面上的图片被删除时。
上述方案中,将所述将图片资源的回收程序封装至图片资源加载类之前,所述方法还包括:
将图片背景设置的加载程序及图片内容显示的加载程序封装至所述图片资源加载类中;
通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片背景及图片内容显示。
上述方案中,当所述图片资源加载为图片背景设置的加载时,加载方法具体包括:
当确定所述图片背景未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩;
当确定所述图片背景需要压缩时,根据第一压缩比例压缩所述图片背景;
根据压缩后的图片背景生成所述图片背景的第一位图像素数据;
当确定所述图片背景为普通图片时,根据所述第一位图像素数据生成第一位图对象;
将所述第一位图对象赋值给需要显示图片背景的视图。
上述方案中,当确定所述图片背景不需要压缩时,所述方法还包括:根据当前的图片背景生成所述图片背景的第一位图像素数据。
上述方案中,在加载过程中,所述方法还包括:捕捉内存不足异常,当捕捉到异常时,放弃加载当前的图片背景资源。
上述方案中,当确定所述图片背景已加载过,所述方法还包括:从位图集合中调用所述图片背景的第一位图像素数据。
上述方案中,当确定所述图片背景为点九图时,所述方法还包括:
删除生成的所述第一位图像素数据;
利用资源ID查找并解析图片背景资源,生成第二位图对象;
将所述第二位图对象赋值给需要显示图片背景的视图。
上述方案中,在加载图片资源之前,所述方法还包括:
根据资源ID判断资源类型;
当确定所述资源类型为图片资源时,通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片资源。
上述方案中,所述资源类型包括:图片资源、色值资源及XML资源。
上述方案中,当确定所述资源类型为色值资源及XML文件资源时,所述方法还包括:
利用所述资源ID查找并解析相应的资源,生成相应的位图对象;
将相应的位图对象赋值给需要显示所述图片背景的视图。
上述方案中,当所述图片资源加载为图片内容显示的加载时,加载方法具体包括:
当确定所述图片内容显示未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;
当确定所述图片内容显示需要压缩时,根据第二压缩比例压缩所述图片内容显示;
根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据;
当确定所述图片内容显示不是点九图时,根据所述第二位图像素数据生成第三位图对象;
将所述第三位图对象赋值给需要显示图片内容显示的视图。
本发明还提供一种回收图片资源的装置,所述装置包括:
第一封装单元,用于将所述图片资源的回收程序封装至图片资源加载类中;
第二封装单元,用于为所述图片资源加载类封装一资源管理接口;
调用单元,用于按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源。
上述方案中,所述装置还包括:建立单元,用于建立位图集合,将加载过程中生成的位图像素数据储存至所述位图集合中。
上述方案中,所述回收时机具体为界面上的图片被删除时。
上述方案中,所述第一封装单元,还用于将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中;
所述调用单元还用于通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片背景及图片内容显示。
上述方案中,当所述图片资源加载为图片背景设置的加载时,所述第一封装单元包括:
第一确定子单元,用于确定当所述图片背景未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩;当确定当所述图片背景需要压缩时,根据第一压缩比例压缩所述图片背景;
第一生成子单元,用于根据压缩后的图片背景生成所述图片背景的第一位图像素数据;
第二确定子单元,用于确定所述图片背景为普通图片时,根据所述第一位图像素数据生成第一位图对象;
第一赋值子单元,用于将所述第一位图对象赋值给需要显示图片背景的视图。
上述方案中,当所述第一确定子单元确定所述图片背景不需要压缩时,所述第一生成子单元还用于:根据当前的图片背景生成所述图片背景的第一位图像素数据。
上述方案中,所述第一封装单元还包括:第一捕捉子单元,用于在加载过程中捕捉内存不足异常,当捕捉到异常时,放弃加载所述图片背景资源。
上述方案中,所述第一封装单元还包括:第一调用子单元,当所述第一确定子单元确定所述图片背景已加载过时,所述第一调用子单元用于从位图集合中调用所述图片背景的第一位图像素数据。
上述方案中,所述第一封装单元还包括:第一删除子单元;当所述第二确定子单元确定所述图片背景为点九图时,
所述第一删除子单元用于删除生成的所述第一位图像素数据;
所述第一生成子单元还用于利用资源ID查找并解析图片背景资源,生成第二位图对象;
所述第一赋值子单元还用于将所述第二位图对象赋值给需要显示图片背景的视图。
上述方案中,在加载图片资源之前,所述第一确定子单元还用于根据资源ID判断资源类型;
当确定当所述资源类型为图片资源时,所述调用单元用于通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片资源。
上述方案中,所述资源类型包括:图片资源、色值资源及XML资源。
上述方案中,所述第一封装单元还包括:第二生成子单元;其中,当所述第一确定子单元确定当所述资源类型为色值资源及XML文件资源时,
所述第二生成子单元用于利用所述资源ID查找并解析相应的资源,生成相应的位图对象;
所述第一赋值子单元还用于将相应的位图对象赋值给需要显示图片背景的视图。
上述方案中,当所述图片资源加载为图片内容显示的加载时,所述第一封装单元还包括:
第三确定子单元,用于确定所述图片内容显示未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;当所述图片内容显示需要压缩时,根据第二压缩比例压缩所述图片内容显示;
第三生成子单元,用于根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据;
第四确定子单元,用于确定当所述图片内容显示为普通图片时,根据所述第二位图像素数据生成第三位图对象;
第二赋值子单元,用于将所述第三位图对象赋值给需要显示图片内容显示的视图。
本发明提供了一种回收图片资源的方法及装置,所述方法包括:将所述图片资源的回收程序封装至图片资源加载类中;为所述图片资源加载类封装一资源管理接口;按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源。如此,在加载过程中,当触发所述回收时机时,即可调用图片资源回收程序对无用的图片资源进行回收,确保了可以及时回收无用的图片资源,释放无用图片资源占用的内存,避免NativeCache内存不足,进而避免出现内存溢出OOM问题。
附图说明
图1为本发明实施例提供的回收图片资源的方法流程示意图;
图2为本发明实施例提供的加载图片背景的方法流程示意图;
图3为本发明实施例提供的加载图片内容显示的方法流程示意图;
图4为本发明实施例提供的回收图片资源的装置结构示意图;
图5为本发明实施例提供的第一封装单元的结构示意图;
图6为本发明实施例提供的第一封装单元的又一结构示意图。
具体实施方式
为了使本申请所属技术领域中的技术人员更清楚地理解本申请,下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
本实施例提供一种加载图片资源的方法,如图1所示,所述方法包括:
S101,将所述图片资源的回收程序封装至图片资源加载类中。
本步骤中,将所述图片资源的回收程序封装至图片加载类之前,需要先将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中。
其中,所述图片资源一般包括图片背景设置及图片内容显示,在加载图片资源时,需要对背景设置及图片内容显示进行加载,因此将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类Decode DrawableHelper中,方便统一加载管理。
将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类Decode DrawableHelper中后,还需建立位图集合mLeakBitmaps,以能将加载过程中生成的位图像素数据Bitmap存入预先建立的位图集合mLeakBitmaps中。
这里,将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类Decode DrawableHelper的实现程序如下:
DecodeDrawableHelper.loadBackground
DecodeDrawableHelper.loadImage
所述Background是指图片背景,所述Image是指图片内容显示。
具体地,当所述图片资源加载为图片背景设置的加载时,参见图2,所述DecodeDrawableHelper.loadBackground对应的加载方法为:
S201,接收资源,根据资源ID判断资源类型是否为图片资源。
这里,不同的资源类型对应不同的资源ID,当接收到资源后,根据资源ID确定资源为图片背景资源时,执行步骤S202;当确定资源为色值资源及XML资源时,执行步骤S203。其中,所述资源类型包括图片资源、色值资源及XML资源;所述图片资源可以包括:普通图片及点九图;所述色值资源包括例如RGB8、RGB4等色值类型。
S202,判断图片背景是否加载过,当确定所述图片背景未加载过时,执行步骤S204。当所述图片背景已加载过时,执行步骤S205。
S203,当确定资源为色值资源及XML资源时,根据所述色值资源及XML对应的资源ID,生成相应的位图对象;将相应的位图对象赋值给需要显示背景的视图。
具体地,通过Resources.getDrawable(resId)方式获取相应的位图对象Drawable,并将所述位图对象Drawable赋值给视图View,使得视图View可以显示相应的资源。其中,所述resId代指资源ID。
这里,将所述位图对象Drawable赋值给视图View之前,所述方法还包括:
判断系统中的SDK_INT是否大于16,当确定所述SDK_INT大于或等于16时,View调用setBackground(drawable)方法获取位图对象Drawable,利用位图对象Drawable赋值背景,从而显示相应的资源;当确定所述SDK_INT小于16时,View调用setBackgroundDrawable)(drawable)方法获取位图对象Drawable,利用位图对象Drawable赋值背景,从而显示相应的资源。应当注意的是,此处所指的背景是指显示色值资源及XML资源的显示背景,与图片背景不同。
S204,获取需要显示的视图View尺寸及图片背景的尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩;当所述图片背景需要压缩时,执行步骤206;当所述图片背景不需要压缩时,执行步骤207。
这里,在本步骤中获取图片背景的尺寸是为了减少内存占用,具体的实现方式为:设置是否只获取边界inJustDecodeBounds的值为true,当设置为true时,在加载图片背景的过程中,只会获取到图片背景的长、宽、高信息,而不会去真正解析图片背景。读取到图片背景的尺寸后,将inJustDecodeBounds的值设为false。
S205,当确定所述图片背景已经加载过时,从所述位图集合mLeakBitmaps中调用所述图片背景的第一位图像素数据Bitmap。其中,为了减少所述第一位图像素数据Bitmap的占用内存,本实施例中将第一位图像素数据Bitmap中一个像素设置占用2个字节,例如,第一位图像素数据Bitmap的加载格式可以设为Bitmap.Config.RGB_565,所述Bitmap.Config.RGB_565占用的字节为2个。
S206,根据第一压缩比例压缩所述图片背景,将图片背景压缩后,根据压缩后的图片背景生成所述图片背景的第一位图像素数据Bitmap;其中,所述第一压缩比例是根据图片背景尺寸及视图尺寸计算得出的。
S207,根据当前的图片背景生成所述图片背景的第一位图像素数据Bitmap。
S208,当图片背景的第一位图像素数据Bitmap生成之后,将所述第一位图像素数据Bitmap缓存至位图集合mLeakBitmaps中,并判断所述图片背景是否为点九图,如确定所述图片背景为普通图片时,执行步骤S209;如确定所述图片为点九图时,执行步骤S210。
S209,当确定所述图片背景为普通图片时,根据所述第一位图像素数据生成第一位图对象Drawable;将所述第一位图对象Drawable赋值给需要显示图片背景的视图View,以使得视图View可以显示图片背景。
S210,当确定所述图片背景为点九图时,删除生成的所述第一位图像素数据Bitmap;利用资源ID查找并解析图片背景资源,生成第二位图对象Drawable;将所述第二位图对象Drawable赋值给需要显示图片背景的视图View。这里,因点九图是Android系统特殊支持的图片类型,如果是点九图,在绘制的时候会根据图片内的预先设置的横纵迭代区域填充重复内容。这里,如果直接根据第一位图像素数据Bitmap生成第一位图对象Drawable的方式获取第一位图对象Drawable,则会覆盖掉点九图的属性。所以当图片背景是点九图时,则需要删除生成的第一位图像素数据Bitmap。
在加载过程中,为了进一步降低资源加载的成本,还可以资源加载类为单位,添加异常捕捉,通过Try,Catch包裹捕捉内存不足(OOM,Out Of Memorty)异常,当出现异常时,放弃加载当前的图片背景资源,以避免因内存不足导致系统应用崩溃。
至此,所述图片背景设置的加载过程完成。
相应地,当所述图片资源加载为图片内容显示的加载时,参见图3,所述DecodeDrawableHelper.loadImage对应的加载方法为:
S301,接收资源,根据资源ID判断资源类型。
这里,不同的资源类型对应不同的资源ID,当接收到资源后,根据资源ID确定资源为图片内容显示资源时,执行步骤S302;当确定资源为色值资源及XML资源时,执行步骤S303。其中,所述资源类型包括图片资源、色值资源及XML资源;所述图片资源可以包括:普通图片及点九图;所述色值资源包括例如RGB8、RGB4等色值类型。
S302,判断图片内容显示是否加载过,当确定所述图片内容显示未加载过时,执行步骤S304。当所述图片内容显示已加载过时,执行步骤S305。
S303,当确定资源为色值资源及XML资源时,根据所述色值资源及XML对应的资源ID生成相应的位图对象。
具体地,通过Resources.getDrawable(resId)方式获取相应的位图对象Drawable,通过ImageView.setImageDrawable方法将位图对象赋值给需要内容显示的视图,使得视图View可以显示相应的资源。其中,所述resId代指资源ID。
S304,获取需要显示的视图View尺寸及图片内容显示的尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;当所述图片内容显示需要压缩时,执行步骤306;当所述图片内容显示不需要压缩时,执行步骤307。
这里,在本步骤中获取图片内容显示的尺寸是为了减少内存占用,具体的实现方式为:设置是否只获取边界inJustDecodeBounds为true,当设置为true时,在加载图片背景的过程中,只会获取到图片内容显示的长、宽、高信息,而不会去真正解析图片内容显示。读取到图片内容显示的尺寸后,再将inJustDecodeBounds设为false。
S305,当确定所述图片内容显示已经加载过时,从所述位图集合mLeakBitmaps中调用所述图片内容显示的第二位图像素数据Bitmap。其中,为了减少所述第二位图像素数据Bitmap的占用内存,本实施例中将第二位图像素数据Bitmap中一个像素设置占用2个字节,例如,第二位图像素数据Bitmap的加载格式可以为Bitmap.Config.RGB_565,所述Bitmap.Config.RGB_565占用的字节为2个。
S306,根据第二压缩比例压缩所述图片背景,将图片内容显示压缩后,根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据Bitmap;其中,所述第二压缩比例是根据图片内容显示尺寸及视图尺寸计算得出的。
S307,根据当前的图片内容显示生成所述图片内容显示的第二位图像素数据Bitmap。
S308,当图片内容显示的第二位图像素数据Bitmap生成之后,将所述第二位图像素数据Bitmap缓存至位图集合中,并判断所述图片内容显示是否为点九图,如确定所述图片内容显示为普通图片时,执行步骤S309;如确定所述图片内容显示为点九图时,执行步骤S310。
S309,当确定所述图片内容显示为普通图片时,根据所述第二位图像素数据Bitmap生成第三位图对象Drawable;将所述第三位图对象Drawable赋值给需要显示图片内容显示的视图View,以使得视图View可以显示图片内容显示。
S310,当确定所述图片内容显示为点九图时,删除生成的所述第二位图像素数据Bitmap;利用资源ID查找并解析图片内容显示资源,生成第四位图对象;将所述第四位图对象Drawable赋值给需要显示图片内容显示的视图View。这里,因点九图是Android系统特殊支持的图片类型,如果是点九图,在绘制的时候会根据图片内的预先设置的横纵迭代区域填充重复内容。这里,如果直接根据第二位图像素数据Bitmap生成第三位图对象Drawable的方式获取第三位图对象Drawable,则会覆盖掉点九图的属性。所以当图片内容显示是点九图时,则需要删除生成的第二位图像素数据Bitmap。
在加载过程中,为了进一步降低资源加载的成本,还可以资源加载类为单位,添加异常捕捉,通过Try,Catch包裹捕捉内存不足(OOM,Out Of Memorty)异常,当捕捉到异常时,放弃加载当前的图片资源,以避免因内存不足导致系统应用崩溃。
至此,所述图片内容显示的加载过程完成。
应当注意的是,本实施例中无论是加载图片背景还是加载图片内容显示时,在资源加载类中,同样的资源只加载一次,有效减少了资源的重复加载,避免因资源重复加载出现内存抖动造成加载过程不稳定的现象。
进一步地,为了可以回收位图集合mLeakBitmaps中无用的图片资源,实现内存管理的可控,避免因内存不足导致应用崩溃,本实施例在将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中后,还将回收图片资源的程序releaseSrc()封装至所述图片资源加载类中,且所述图片资源回收的程序与所述图片资源加载的程序共用一资源管理接口,所述回收图片资源的程序releaseSrc()具体实现如下:
这里,当触发到预设的图片资源的回收时机时,则会通过所述资源管理接口调用资源回收程序循环执行recycle,来回收位图集合mLeakBitmaps中无用的对第一位图像素数据Bitmap及第一位图像素数据Bitmap。其中,所述回收时机具体为界面上的图片被删除时。
S102,为所述图片资源加载类封装一资源管理接口。
当将图片背景设置的加载程序、图片内容显示的加载程序及图片资源的回收程序封装至图片资源加载类中后,还需为所述图片资源加载类封装一资源管理接口IDecodeDrawableHelper,在需要对图片资源进行加载或对图片资源进行回收时,只需通过所述资源管理接口即可调用资源加载类中的图片资源加载程序对图片资源进行加载,或通过资源管理接口调用图片资源回收程序对图片资源进行回收。这样就可以通过同一个资源管理接口实现图片背景设置、图片内容显示及图片资源回收,从而实现图片资源加载和回收的统一管理。
具体地,所述资源管理接口IDecodeDrawableHelper的封装过程如下:
可以看出,在所述资源管理接口IDecodeDrawableHelper下,包含两种方法:第一是getHelper,指获取封装的加载类下的资源加载方法;第二是releaseSrc,指回收资源的方法。
S103,按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源。
本步骤中,当将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中;且将图片资源加载类对应的资源管理接口IDecodeDrawableHelper封装好之后;即可过所述资源管理接口IDecodeDrawableHelper调用相应的图片资源加载类,加载相应的图片背景及图片内容显示,具体的加载方法可参见步骤201~210及步骤201~210;或者按照预设的回收时机通过所述资源管理接口IDecodeDrawableHelper调用图片资源回收程序,回收无用的图片资源,具体的回收资源方法可参见步骤S101。
在实际应用中,步骤S101中记载的图片资源加载方法及图片资源回收方法可以适用于任意的View内、ViewGroup内及基类BaseActivity中,以某浏览器中的Activity的基类BaseActivity为例,图片资源加载的方法及图片资源回收的方法的具体实现如下:
获取封装的图片资源加载类下的图片资源加载的方法:
图片资源回收的方法:
在加载过程中,当界面图片被删除,即在Activity onDestroy时调用资源回收方法releaseSrc对图片资源进行回收,调用过程的程序实现如下:
这样在BaseActivity内,以及继承自BaseActivity的类内,加载图片资源的时候只需要通过调用getHelper().loadBackground对图片背景设置进行加载,或者通过调用getHelper.loadImage的方法对图片内容显示进行加载;回收图片资源的时候,只要触发到回收时机即可调用releaseSrc对无用的图片资源进行回收。
实施例二
相应于实施例一,本实施例还提供一种加载图片资源的装置,如图4所示,所述装置包括:第一封装单元41、第二封装单元42、调用单元43及建立单元44;其中,
第一封装单元41用于将所述图片资源的回收程序封装至图片资源加载类中;这里,在第一封装单元41将所述图片资源的回收程序封装至图片资源加载类中之前,所述第一封装单元41先将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中;其中,所述图片资源一般包括图片背景设置及图片内容显示,在加载图片资源时,需要对背景设置及图片内容显示进行加载,因此将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类Decode DrawableHelper中,方便统一加载管理。
所述第一封装单元41将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类Decode DrawableHelper中后,所述建立单元44还需建立位图集合mLeakBitmaps,以能将加载过程中生成的位图像素数据Bitmap存入预先建立的位图集合mLeakBitmaps中。
这里,所述第一封装单元41将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类Decode DrawableHelper的实现程序如下:
DecodeDrawableHelper.loadBackground
DecodeDrawableHelper.loadImage
所述Background是指图片背景,所述Image是指图片内容显示。
具体地,参见图5,所述第一封装单元41包括:第一确定子单元51、第一调用子单元52、第一生成子单元53、第二确定子单元54、第一赋值子单元55、第一删除子单元56、第二生成子单元57及第一捕捉子单元58;其中,
当所述图片资源加载为图片背景设置的加载时,所述第一确定子单元51用于接收资源,根据资源ID判断资源类型。这里,因不同的资源类型对应不同的资源ID,因此可以根据资源ID判断出资源类型。其中,所述资源类型包括图片资源、色值资源及XML资源;所述图片资源可以包括:普通图片及点九图;所述色值资源包括例如RGB8、RGB4等色值类型。
当所述第一确定子单元51确定资源为图片背景资源时,还需判断图片背景是否加载过,当确定所述图片背景未加载过时,获取需要显示的视图View尺寸及图片背景的尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩。当确定所述图片背景需要压缩时,根据第一压缩比例压缩所述图片背景。这里,第一确定子单元51获取图片背景的尺寸是为了减少内存占用,具体的实现方式为:第一确定子单元51设置是否只获取边界inJustDecodeBounds的值为true,当设置为为true时,在加载图片背景的过程中,只会获取到图片背景的长、宽、高信息,而不会去真正解析图片背景。当第一确定子单元51读取到图片背景的尺寸后,将inJustDecodeBounds设为false。
进一步地,当所述第一确定子单元51确定所述图片背景已载过时,所述第一调用子单元52用于从所述位图集合mLeakBitmaps中调用所述图片背景的第一位图像素数据Bitmap。其中,为了减少所述第一位图像素数据Bitmap的占用内存,本实施例中将第一位图像素数据Bitmap中一个像素设置占用2个字节,例如,第一位图像素数据Bitmap的加载格式可以为Bitmap.Config.RGB_565,所述Bitmap.Config.RGB_565占用的字节为2个。
当所述第一确定子单元51确定所述图片背景不需要压缩时,所述第一生成子单元53还用于根据当前的图片背景生成所述图片背景的第一位图像素数据Bitmap。
当所述第一生成子单元53根据当前的图片背景生成所述图片背景的第一位图像素数据Bitmap后,将所述第一位图像素数据Bitmap缓存至位图集合mLeakBitmaps中。
当所述第一生成子单元53根据当前的图片背景生成所述图片背景的第一位图像素数据Bitmap后,所述第二确定子单元54用于判断所述图片背景是否为点九图,如确定所述图片背景为普通图片时,还用于根据所述第一位图像素数据Bitmap生成第一位图对象Drawable,所述第一赋值子单元55则将第一位图对象Drawable赋值给需要显示图片背景的视图View,以使得视图View可以显示图片背景。
当所述第二确定子单元54确定所述图片背景为点九图时,所述第一删除子单元56用于删除生成的所述第一位图像素数据Bitmap;所述第一生成子单元53还用于利用资源ID查找并解析图片背景资源,生成第二位图对象;那么所述第一赋值子单元55还用于将所述第二位图对象赋值给需要显示图片背景的视图View。这里,因点九图是Android系统特殊支持的图片类型,如果是点九图,在绘制的时候会根据图片内的预先设置的横纵迭代区域填充重复内容。这里,如果直接根据第一位图像素数据Bitmap转第一位图对象Drawable的方式获取第一位图对象Drawable,则会覆盖掉点九图的属性。所以当图片背景是点九图时,则需要删除生成的第一位图像素数据Bitmap。
进一步地,当所述第一确定子单元51确定资源为色值资源及XML资源时,所述第二生成子单元57还用于根据所述色值资源及XML对应的资源ID,生成相应的位图对象;所述第一赋值子单元55还用于将相应的位图对象赋值给需要显示背景的视图。
具体地,当所述第一确定子单元51当确定资源为色值资源及XML资源时,所述第二生成子单元57通过Resources.getDrawable(resId)方式获取相应的位图对象Drawable,所述第一赋值子单元55将所述位图对象Drawable赋值给视图View,使得视图View可以显示相应的资源。其中,所述resId代指资源ID。
这里,第一赋值子单元55将所述位图对象Drawable赋值给视图View之前,所述第一确定子单元51还用于:判断系统中的SDK_INT是否大于16,当确定所述SDK_INT大于或等于16时,View调用setBackground(drawable)方法获取位图对象Drawable,利用位图对象Drawable赋值背景,从而显示相应的资源;当确定所述SDK_INT小于16时,View调用setBackgroundDrawable)(drawable)方法获取位图对象Drawable,利用位图对象Drawable赋值背景,从而显示相应的资源。应当注意的是,此处所指的背景是指显示色值资源及XML资源的显示背景,与图片背景不同。
另外,在加载过程中,为了进一步降低资源加载的成本,所述第一封装单元41还包括:第一捕捉子单元58,第一捕捉子单元58用于资源加载类为单位,添加异常捕捉,通过Try,Catch包裹捕捉内存不足(OOM,Out Of Memorty)异常,当出现异常时,放弃加载当前的图片背景资源,以避免因内存不足导致系统应用崩溃。
相应地,当所述图片资源加载为图片内容显示的加载时,参见图6,所述第一封装单元41还包括:第三确定子单元61、第二调用子单元62、第三生成子单元63、第四确定子单元64、第二赋值子单元65、第二删除子单元66、第四生成子单元67及第二捕捉子单元68;其中,
所述第三确定子单元61用于接收资源,根据资源ID判断资源类型。这里,不同的资源类型对应不同的资源ID,因此可以根据资源ID判断出资源类型。
当接收到资源后,所述第三确定子单元61根据资源ID确定资源为图片内容显示资源时,判断图片内容显示是否加载过,当确定所述图片内容显示未加载过时;获取需要显示的视图View尺寸及图片内容显示的尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;当确定所述图片内容显示需要压缩时,根据第二压缩比例压缩所述图片内容显示,将图片内容显示压缩后,根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据Bitmap;其中,所述第二压缩比例是根据图片内容显示尺寸及视图尺寸计算得出的。这里,所述第三确定子单元61获取图片内容显示的尺寸是为了减少内存占用,具体的实现方式为:设置是否只获取边界inJustDecodeBounds的值为true,当设置为为true时,在加载图片背景的过程中,只会获取到图片内容显示的长、宽、高信息,而不会去真正解析图片内容显示。读取到图片内容显示的尺寸后,再将inJustDecodeBounds的值设为false。
当所述第三确定子单元61确定所述图片内容显示已加载过时,所述第二调用子单元62用于从所述位图集合mLeakBitmaps中调用所述图片内容显示的第二位图像素数据Bitmap。其中,为了减少所述第二位图像素数据Bitmap的占用内存,本实施例中将第二位图像素数据Bitmap中一个像素设置占用2个字节,例如,第二位图像素数据Bitmap的加载格式可以为Bitmap.Config.RGB_565,所述Bitmap.Config.RGB_565占用的字节为2个。
当所述第三确定子单元61确定所述图片内容显示不需要压缩时,所述第三生成子单元63根据当前的图片内容显示生成所述图片背景的第二位图像素数据Bitmap。
当所述第三生成子单元63根据当前的图片内容显示图片内容显示的第二位图像素数据Bitmap生成之后,将所述第二位图像素数据Bitmap缓存至位图集合中,所述第四确定子单元64用于判断所述图片内容显示是否为点九图,如确定所述图片内容显示为普通图片时,所述第三生成子单元63用于根据所述第二位图像素数据生成第三位图对象Drawable;所述第二赋值子单元65将所述第三位图对象Drawable赋值给需要显示图片内容显示的视图View,以使得视图View可以显示图片内容显示。
当所述第四确定子单元64确定所述图片内容显示为点九图时,所述第二删除子单元66用于删除生成的所述第二位图像素数据Bitmap;所述第三生成子单元63还用于利用资源ID查找并解析图片内容显示资源,生成第四位图对象Drawable;所述第二赋值子单元65还用于将所述第四位图对象赋值给需要显示图片内容显示的视图View。这里,因点九图是特殊支持的图片类型,如果是点九图,在绘制的时候会根据图片内的预先设置的横纵迭代区域填充重复内容。这里,如果直接根据第二位图像素数据Bitmap生成第三位图对象Drawable的方式获取第三位图对象Drawable,则会覆盖掉点九图的属性。所以当图片内容显示是点九图时,则需要删除生成的第二位图像素数据Bitmap。
进一步地,当所述第三确定子单元61确定资源为色值资源及XML资源时,所述第四生成子单元67还用于根据所述色值资源及XML对应的资源ID生成相应的位图对象。所述第二赋值子单元65还用于将相应的位图对象赋值给需要显示显示图片内容显示的视图。
具体地,当所述第三确定子单元61确定资源为色值资源及XML资源时,所述第四生成子单元67通过Resources.getDrawable(resId)方式获取相应的位图对象Drawable,所述第二赋值子单元65通过ImageView.setImageDrawable方法将位图对象赋值给需要内容显示的视图,使得视图View可以显示相应的资源。其中,所述resId代指资源ID。
另外,在加载过程中,为了进一步降低资源加载的成本,所述第一封装单元41还包括:第二捕捉子单元68,第二捕捉子单元68用于资源加载类为单位,添加异常捕捉,通过Try,Catch包裹捕捉内存不足OOM异常,当出现异常时,放弃加载当前的图片资源,以避免因内存不足导致系统应用崩溃。
应当注意的是,本实施例中无论是加载图片背景还是加载图片内容显示时,在资源加载类中,同样的资源只加载一次,有效减少了资源的重复加载,避免因资源重复加载出现内存抖动造成加载过程不稳定的现象。
至此,所述第一封装单元41将所述图片资源的回收程序封装至图片资源加载类中封装过程完成。
进一步地,为了可以回收位图集合mLeakBitmaps中无用的图片资源,实现内存管理的可控,避免因内存不足导致应用崩溃,所述第一封装单元41将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中后,还用于将回收图片资源的程序releaseSrc()封装至所述图片资源加载类中,且所述图片资源回收的程序与所述图片资源加载的程序共用一资源管理接口,所述回收图片资源的程序releaseSrc()具体实现如下:
这里,当触发到预设的图片资源的回收时机时,则会循环执行recycle,来回收位图集合mLeakBitmaps中无用的对第一位图像素数据Bitmap及第一位图像素数据Bitmap。其中,所述回收时机具体为界面上的图片被删除时。
进一步地,当所述第一封装单元41将图片背景设置的加载程序、图片内容显示的加载程序及图片资源的回收程序封装至图片资源加载类中后,所述第二封装单元42用于为所述图片资源加载类封装一资源管理接口。
具体地,当当所述第一封装单元41将图片背景设置的加载程序、图片内容显示的加载程序及图片资源的回收程序封装至图片资源加载类中后,还需为所述图片资源加载类封装一资源管理接口IDecodeDrawableHelper,在需要对图片资源进行加载或对图片资源进行回收时,只需通过所述资源管理接口即可调用资源加载类中的图片资源加载程序对图片资源进行加载,或通过资源管理接口调用图片资源回收程序对图片资源进行回收。这样就可以通过同一个资源管理接口实现图片背景设置、图片内容显示及图片资源回收,从而实现图片资源加载和回收的统一管理。
具体地,所述第二封装单元42对所述资源管理接口IDecodeDrawableHelper的封装过程如下:
可以看出,在所述资源管理接口IDecodeDrawableHelper下,包含两种方法:第一是getHelper,指获取封装的加载类下的资源加载方法;第二是releaseSrc,指回收资源的方法。
当所述第一封装单元41将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中;所述第二封装单元42将图片资源加载类对应的资源管理接口IDecodeDrawableHelper封装好之后,所述调用单元43即可也可按照预设的回收时机通过所述资源管理接口IDecodeDrawableHelper调用图片资源回收程序,回收无用的图片资源,具体的回收资源过程也可参见上文。或者所述调用单元43通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片背景及图片内容显示。具体的加载过程可参见上文。
在实际应用中,上文中记载的图片资源加载过程及图片资源回收过程可以适用于任意的View内、ViewGroup内及基类BaseActivity中,以某浏览器中的Activity的基类BaseActivity为例,图片资源加载的过程及图片资源回收的过程的具体实现如下:
获取封装的图片资源加载类下的图片资源加载的方法:
图片资源回收的方法:
在加载过程中,当界面图片被删除,即在Activity onDestroy时,所述调用单元43可调用资源回收方法releaseSrc对图片资源进行回收,所述调用过程的程序实现如下:
这样在BaseActivity内,以及继承自BaseActivity的类内,加载图片资源的时候只需要通过调用getHelper().loadBackground对图片背景设置进行加载,或者通过调用getHelper.loadImage的方法对图片内容显示进行加载;回收图片资源的时候,只要触发到回收时机即可调用releaseSrc对无用的图片资源进行回收。
通过本发明的一个或者多个实施例,本发明具有以下有益效果或者优点:
本发明公开了一种回收图片资源的方法及装置,在回收图片资源之前,将所述图片资源的回收程序封装至图片资源加载类中;为所述图片资源加载类封装一资源管理接口;在加载过程中,当触发所述回收时机时,即可调用图片资源回收程序对无用的图片资源进行回收,确保了可以及时回收无用的图片资源,释放无用图片资源占用的内存,避免NativeCache内存不足,进而避免出现内存溢出OOM问题。并且,该方法通过预先建立位图集合,将加载过程中的生成的位图像素数据存储至该位图集合中,实现内存管理可控。
另外,将所述图片资源的回收程序封装至图片资源加载类中之前,还将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中;这样,所述资源管理接口下还包括两种加载程序:图片背景设置的加载程序及图片内容显示的加载程序;在需要加载图片资源时,无论是加载图片背景设置还是加载图片内容显示,业务层都可以通过所述资源管理接口调用相应的图片资源加载类,一并加载相应的图片背景及所述图片内容显示,从而优化了资源加载过程,降低了资源加载的成本。并且,以资源加载类为单位,添加异常捕捉,可以对加载过程出现的异常进行统一捕捉和处理,进一步降低了资源加载的成本;并且也实现了资源加载、回收的统一管理。
无论是加载图片背景还是加载图片内容显示时,在资源加载类中,同样的资源只加载一次,有效减少了资源的重复加载,避免因资源重复加载出现内存抖动造成加载过程不稳定的现象。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的网关、代理服务器、系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包括”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了,A1一种回收图片资源的方法,其特征在于,所述方法包括:
将所述图片资源的回收程序封装至图片资源加载类中;
为所述图片资源加载类封装一资源管理接口;
按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源。
A2、如权利要求A1所述的方法,其特征在于,按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源之前,所述方法还包括:建立位图集合,将加载过程中生成的位图像素数据储存至所述位图集合中。
A3、如权利要求A2所述的方法,其特征在于,所述回收时机具体为界面上的图片被删除时。
A5、如权利要求A1所述的方法,其特征在于,其特征在于,将所述将图片资源的回收程序封装至图片资源加载类之前,所述方法还包括:
将图片背景设置的加载程序及图片内容显示的加载程序封装至所述图片资源加载类中;
通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片背景及图片内容显示。
A5、如权利要求A4所述的方法,其特征在于,当所述图片资源加载为图片背景设置的加载时,加载方法具体包括:
当确定所述图片背景未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩;
当确定所述图片背景需要压缩时,根据第一压缩比例压缩所述图片背景;
根据压缩后的图片背景生成所述图片背景的第一位图像素数据;
当确定所述图片背景为普通图片时,根据所述第一位图像素数据生成第一位图对象;
将所述第一位图对象赋值给需要显示图片背景的视图。
A6、如权利要求A5所述的方法,其特征在于,当确定所述图片背景不需要压缩时,所述方法还包括:根据当前的图片背景生成所述图片背景的第一位图像素数据。
A7、如权利要求A5所述的方法,其特征在于,在加载过程中,所述方法还包括:捕捉内存不足异常,当捕捉到异常时,放弃加载当前的图片背景资源。
A8、如权利要求A5所述的方法,其特征在于,当确定所述图片背景已加载过,所述方法还包括:从位图集合中调用所述图片背景的第一位图像素数据。
A9、如权利要求A5所述的方法,其特征在于,当确定所述图片背景为点九图时,所述方法还包括:
删除生成的所述第一位图像素数据;
利用资源ID查找并解析图片背景资源,生成第二位图对象;
将所述第二位图对象赋值给需要显示图片背景的视图。
A10、如权利要求A5所述的方法,其特征在于,在加载图片资源之前,所述方法还包括:
根据资源ID判断资源类型;
当确定所述资源类型为图片资源时,通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片资源。
A11、如权利要求A10所述的方法,其特征在于,所述资源类型包括:图片资源、色值资源及XML资源。
A12、如权利要求A11所述的方法,其特征在于,当确定所述资源类型为色值资源及XML文件资源时,所述方法还包括:
利用所述资源ID查找并解析相应的资源,生成相应的位图对象;
将相应的位图对象赋值给需要显示所述图片背景的视图。
A13、如权利要求A5所述的方法,其特征在于,当所述图片资源加载为图片内容显示的加载时,加载方法具体包括:
当确定所述图片内容显示未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;
当确定所述图片内容显示需要压缩时,根据第二压缩比例压缩所述图片内容显示;
根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据;
当确定所述图片内容显示不是点九图时,根据所述第二位图像素数据生成第三位图对象;
将所述第三位图对象赋值给需要显示图片内容显示的视图。
B14、一种加载图片资源的装置,其特征在于,所述装置包括:
第一封装单元,用于将所述图片资源的回收程序封装至图片资源加载类中;
第二封装单元,用于为所述图片资源加载类封装一资源管理接口;
调用单元,用于按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收位图集合中无用的图片资源。
B15、如权利要求B14所述的装置,其特征在于,所述装置还包括:建立单元,用于建立所述位图集合,将加载过程中生成的位图像素数据储存至所述位图集合中。
将加载过程中生成的位图像素数据存入预先建立的位图集合中。
B16、如权利要求B14所述的装置,其特征在于,其特征在于,所述回收时机具体为界面上的图片被删除时。
B17、如权利要求14所述的装置,其特征在于,所述第一封装单元,还用于将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中;
所述调用单元还用于通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片背景及图片内容显示。
B18、如权利要求B17所述的装置,其特征在于,当所述图片资源加载为图片背景设置的加载时,所述第一封装单元包括:
第一确定子单元,用于确定当所述图片背景未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩;当确定当所述图片背景需要压缩时,根据第一压缩比例压缩所述图片背景;
第一生成子单元,用于根据压缩后的图片背景生成所述图片背景的第一位图像素数据;
第二确定子单元,用于确定所述图片背景为普通图片时,根据所述第一位图像素数据生成第一位图对象;
第一赋值子单元,用于将所述第一位图对象赋值给需要显示图片背景的视图。
B19、如权利要求B18所述的装置,其特征在于,当所述第一确定子单元确定所述图片背景不需要压缩时,所述第一生成子单元还用于:根据当前的图片背景生成所述图片背景的第一位图像素数据。
B20、如权利要求B18所述的装置,其特征在于,所述第一封装单元还包括:第一捕捉子单元,用于在加载过程中捕捉内存不足异常,当捕捉到异常时,放弃加载所述图片背景资源。
B21、如权利要求B18所述的装置,其特征在于,所述第一封装单元还包括:第一调用子单元,当所述第一确定子单元确定所述图片背景已加载过时,所述第一调用子单元用于从位图集合中调用所述图片背景的第一位图像素数据。
B22、如权利要求B18所述的装置,其特征在于,所述第一封装单元还包括:第一删除子单元;当所述第二确定子单元确定所述图片背景为点九图时,
所述第一删除子单元用于删除生成的所述第一位图像素数据;
所述第一生成子单元还用于利用资源ID查找并解析图片背景资源,生成第二位图对象;
所述第一赋值子单元还用于将所述第二位图对象赋值给需要显示图片背景的视图。
B23、如权利要求B14所述的装置,其特征在于,在加载图片资源之前,所述第一确定子单元还用于根据资源ID判断资源类型;
当确定当所述资源类型为图片资源时,所述调用单元用于通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片资源。
B24、如权利要求B23所述的装置,其特征在于,所述资源类型包括:图片资源、色值资源及XML资源。
B25、如权利要求B23所述的装置,其特征在于,所述第一封装单元还包括:第二生成子单元;其中,当所述第一确定子单元确定当所述资源类型为色值资源及XML文件资源时,
所述第二生成子单元用于利用所述资源ID查找并解析相应的资源,生成相应的位图对象;
所述第一赋值子单元还用于将相应的位图对象赋值给需要显示图片背景的视图。
B26、如权利要求B18所述的装置,其特征在于,当所述图片资源加载为图片内容显示的加载时,所述第一封装单元还包括:
第三确定子单元,用于确定所述图片内容显示未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;当所述图片内容显示需要压缩时,根据第二压缩比例压缩所述图片内容显示;
第三生成子单元,用于根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据;
第四确定子单元,用于确定当所述图片内容显示为普通图片时,根据所述第二位图像素数据生成第三位图对象;
第二赋值子单元,用于将所述第三位图对象赋值给需要显示图片内容显示的视图。
Claims (24)
1.一种回收图片资源的方法,其特征在于,所述方法包括:
将所述图片资源的回收程序封装至图片资源加载类中;
为所述图片资源加载类封装一资源管理接口;
按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源;其中,
将所述图片资源的回收程序封装至图片资源加载类之前,所述方法还包括:
将图片背景设置的加载程序及图片内容显示的加载程序封装至所述图片资源加载类中;
通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片背景及图片内容显示。
2.如权利要求1所述的方法,其特征在于,按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源之前,所述方法还包括:建立位图集合,将加载过程中生成的位图像素数据储存至所述位图集合中。
3.如权利要求1所述的方法,其特征在于,所述回收时机具体为界面上的图片被删除时。
4.如权利要求1所述的方法,其特征在于,当所述图片资源加载为图片背景设置的加载时,加载方法具体包括:
当确定所述图片背景未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩;
当确定所述图片背景需要压缩时,根据第一压缩比例压缩所述图片背景;
根据压缩后的图片背景生成所述图片背景的第一位图像素数据;
当确定所述图片背景为普通图片时,根据所述第一位图像素数据生成第一位图对象;
将所述第一位图对象赋值给需要显示图片背景的视图。
5.如权利要求4所述的方法,其特征在于,当确定所述图片背景不需要压缩时,所述方法还包括:根据当前的图片背景生成所述图片背景的第一位图像素数据。
6.如权利要求4所述的方法,其特征在于,在加载过程中,所述方法还包括:捕捉内存不足异常,当捕捉到异常时,放弃加载当前的图片背景资源。
7.如权利要求4所述的方法,其特征在于,当确定所述图片背景已加载过,所述方法还包括:从位图集合中调用所述图片背景的第一位图像素数据。
8.如权利要求4所述的方法,其特征在于,当确定所述图片背景为点九图时,所述方法还包括:
删除生成的所述第一位图像素数据;
利用资源ID查找并解析图片背景资源,生成第二位图对象;
将所述第二位图对象赋值给需要显示图片背景的视图。
9.如权利要求4所述的方法,其特征在于,在加载图片资源之前,所述方法还包括:
根据资源ID判断资源类型;
当确定所述资源类型为图片资源时,通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片资源。
10.如权利要求9所述的方法,其特征在于,所述资源类型包括:图片资源、色值资源及XML资源。
11.如权利要求10所述的方法,其特征在于,当确定所述资源类型为色值资源及XML文件资源时,所述方法还包括:
利用所述资源ID查找并解析相应的资源,生成相应的位图对象;
将相应的位图对象赋值给需要显示所述图片背景的视图。
12.如权利要求4所述的方法,其特征在于,当所述图片资源加载为图片内容显示的加载时,加载方法具体包括:
当确定所述图片内容显示未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;
当确定所述图片内容显示需要压缩时,根据第二压缩比例压缩所述图片内容显示;
根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据;
当确定所述图片内容显示不是点九图时,根据所述第二位图像素数据生成第三位图对象;
将所述第三位图对象赋值给需要显示图片内容显示的视图。
13.一种回收图片资源的装置,其特征在于,所述装置包括:
第一封装单元,用于将所述图片资源的回收程序封装至图片资源加载类中;
第二封装单元,用于为所述图片资源加载类封装一资源管理接口;
调用单元,用于按照预设的回收时机通过所述资源管理接口调用所述图片资源回收程序,回收无用的图片资源;其中,
所述第一封装单元,还用于将图片背景设置的加载程序及图片内容显示的加载程序封装至图片资源加载类中;
所述调用单元还用于通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片背景及图片内容显示。
14.如权利要求13所述的装置,其特征在于,所述装置还包括:建立单元,用于建立位图集合,将加载过程中生成的位图像素数据储存至所述位图集合中。
15.如权利要求13所述的装置,其特征在于,所述回收时机具体为界面上的图片被删除时。
16.如权利要求13所述的装置,其特征在于,当所述图片资源加载为图片背景设置的加载时,所述第一封装单元包括:
第一确定子单元,用于确定当所述图片背景未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片背景是否需要压缩;当确定当所述图片背景需要压缩时,根据第一压缩比例压缩所述图片背景;
第一生成子单元,用于根据压缩后的图片背景生成所述图片背景的第一位图像素数据;
第二确定子单元,用于确定所述图片背景为普通图片时,根据所述第一位图像素数据生成第一位图对象;
第一赋值子单元,用于将所述第一位图对象赋值给需要显示图片背景的视图。
17.如权利要求16所述的装置,其特征在于,当所述第一确定子单元确定所述图片背景不需要压缩时,所述第一生成子单元还用于:根据当前的图片背景生成所述图片背景的第一位图像素数据。
18.如权利要求16所述的装置,其特征在于,所述第一封装单元还包括:第一捕捉子单元,用于在加载过程中捕捉内存不足异常,当捕捉到异常时,放弃加载所述图片背景资源。
19.如权利要求16所述的装置,其特征在于,所述第一封装单元还包括:第一调用子单元,当所述第一确定子单元确定所述图片背景已加载过时,所述第一调用子单元用于从位图集合中调用所述图片背景的第一位图像素数据。
20.如权利要求16所述的装置,其特征在于,所述第一封装单元还包括:第一删除子单元;当所述第二确定子单元确定所述图片背景为点九图时,
所述第一删除子单元用于删除生成的所述第一位图像素数据;
所述第一生成子单元还用于利用资源ID查找并解析图片背景资源,生成第二位图对象;
所述第一赋值子单元还用于将所述第二位图对象赋值给需要显示图片背景的视图。
21.如权利要求16所述的装置,其特征在于,在加载图片资源之前,所述第一确定子单元还用于根据资源ID判断资源类型;
当确定当所述资源类型为图片资源时,所述调用单元用于通过所述资源管理接口调用相应的图片资源加载类,加载相应的图片资源。
22.如权利要求21所述的装置,其特征在于,所述资源类型包括:图片资源、色值资源及XML资源。
23.如权利要求16所述的装置,其特征在于,所述第一封装单元还包括:第二生成子单元;其中,当所述第一确定子单元确定当所述资源类型为色值资源及XML文件资源时,
所述第二生成子单元用于利用所述资源ID查找并解析相应的资源,生成相应的位图对象;
所述第一赋值子单元还用于将相应的位图对象赋值给需要显示图片背景的视图。
24.如权利要求16所述的装置,其特征在于,当所述图片资源加载为图片内容显示的加载时,所述第一封装单元还包括:
第三确定子单元,用于确定所述图片内容显示未加载过时,获取需要显示的视图尺寸,根据所述视图尺寸判断所述图片内容显示是否需要压缩;当所述图片内容显示需要压缩时,根据第二压缩比例压缩所述图片内容显示;
第三生成子单元,用于根据压缩后的图片内容显示生成所述图片内容显示的第二位图像素数据;
第四确定子单元,用于确定当所述图片内容显示为普通图片时,根据所述第二位图像素数据生成第三位图对象;
第二赋值子单元,用于将所述第三位图对象赋值给需要显示图片内容显示的视图。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611189937.3A CN106598614B (zh) | 2016-12-21 | 2016-12-21 | 一种回收图片资源的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611189937.3A CN106598614B (zh) | 2016-12-21 | 2016-12-21 | 一种回收图片资源的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106598614A CN106598614A (zh) | 2017-04-26 |
CN106598614B true CN106598614B (zh) | 2020-12-25 |
Family
ID=58600096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611189937.3A Expired - Fee Related CN106598614B (zh) | 2016-12-21 | 2016-12-21 | 一种回收图片资源的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598614B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762916B (zh) * | 2018-05-03 | 2022-12-13 | 北京五八信息技术有限公司 | 一种内存管理方法、装置、设备及计算机可读存储介质 |
CN111221992A (zh) * | 2019-12-31 | 2020-06-02 | 五八有限公司 | 一种无用图片的确定方法、装置、电子设备及存储介质 |
CN114398124B (zh) * | 2021-12-31 | 2024-04-12 | 深圳市珍爱捷云信息技术有限公司 | 基于iOS系统的点九效果图渲染方法及其相关装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140366034A1 (en) * | 2013-06-06 | 2014-12-11 | Canon Kabushiki Kaisha | Image processing apparatus, control method thereof and storage medium |
CN105468368A (zh) * | 2015-11-23 | 2016-04-06 | 浪潮软件股份有限公司 | 一种界面美化方法 |
CN106126650A (zh) * | 2016-06-24 | 2016-11-16 | 武汉斗鱼网络科技有限公司 | 一种基于php扩展的网页图片支持系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103077014A (zh) * | 2012-12-25 | 2013-05-01 | 深圳Tcl新技术有限公司 | 基于界面生命周期回收图片的方法和装置 |
CN103309749A (zh) * | 2013-06-25 | 2013-09-18 | 四川九洲电器集团有限责任公司 | 一种基于安卓系统图片资源的内存释放方法 |
CN103677942B (zh) * | 2013-12-30 | 2017-09-05 | Tcl集团股份有限公司 | 一种移动终端浏览网络图片的方法和装置 |
CN104267996A (zh) * | 2014-09-29 | 2015-01-07 | 广州金山网络科技有限公司 | 一种图片资源处理方法、装置及终端 |
-
2016
- 2016-12-21 CN CN201611189937.3A patent/CN106598614B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140366034A1 (en) * | 2013-06-06 | 2014-12-11 | Canon Kabushiki Kaisha | Image processing apparatus, control method thereof and storage medium |
CN104243743A (zh) * | 2013-06-06 | 2014-12-24 | 佳能株式会社 | 图像处理装置及其控制方法 |
CN105468368A (zh) * | 2015-11-23 | 2016-04-06 | 浪潮软件股份有限公司 | 一种界面美化方法 |
CN106126650A (zh) * | 2016-06-24 | 2016-11-16 | 武汉斗鱼网络科技有限公司 | 一种基于php扩展的网页图片支持系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106598614A (zh) | 2017-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598679B (zh) | 一种加载图片资源的方法及装置 | |
CN108845861B (zh) | 虚拟摄像头的实现方法及装置 | |
CN103677942B (zh) | 一种移动终端浏览网络图片的方法和装置 | |
CN106598614B (zh) | 一种回收图片资源的方法及装置 | |
JP5887419B2 (ja) | 携帯端末内のアプリケーションの画面のスクリーンショットをとるための方法及び装置 | |
CN106295370B (zh) | 一种加固安装包的动态链接库dll文件的方法和装置 | |
CN108563517A (zh) | 系统接口的调用方法及装置 | |
CN108021671B (zh) | 一种页面透明处理方法及装置 | |
CN107798064B (zh) | 页面处理方法、电子设备及计算机可读存储介质 | |
CN108364324B (zh) | 图像数据处理方法、装置及电子终端 | |
CN111931095A (zh) | 一种Android系统的图片加载方法 | |
CN105138399A (zh) | 跨平台移动Web应用运行引擎 | |
CN106293658B (zh) | 一种界面组件生成方法及其设备 | |
CN112188087B (zh) | 一种全景视频的截图方法、装置、存储介质和计算机设备 | |
CN113038141A (zh) | 视频帧处理方法及电子设备 | |
CN110032390B (zh) | 一种实现多机型共升级包的方法、存储介质及智能终端 | |
CN106204668B (zh) | 图片解码方法和装置 | |
CN106020729A (zh) | 一种移动设备的多媒体数据的清理方法和装置 | |
CN113822978B (zh) | 电子地图渲染方法及装置 | |
CN117971350A (zh) | 小程序运行方法、装置和计算机可读存储介质 | |
CN112330816B (zh) | Ar识别的处理方法、装置和电子装置 | |
CN110704157B (zh) | 一种应用启动方法、相关装置及介质 | |
CN114217710A (zh) | 弹框控制方法、装置、存储介质及系统 | |
CN112000364B (zh) | 应用程序的打包方法、装置、设备及存储介质 | |
CN108829502B (zh) | 线程操作的实现方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20201225 |