CN106980579B - 一种图片加载方法及装置 - Google Patents

一种图片加载方法及装置 Download PDF

Info

Publication number
CN106980579B
CN106980579B CN201610877535.6A CN201610877535A CN106980579B CN 106980579 B CN106980579 B CN 106980579B CN 201610877535 A CN201610877535 A CN 201610877535A CN 106980579 B CN106980579 B CN 106980579B
Authority
CN
China
Prior art keywords
picture
heap memory
data
bitmap object
decoded data
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.)
Active
Application number
CN201610877535.6A
Other languages
English (en)
Other versions
CN106980579A (zh
Inventor
李锦敏
冯显桂
余龙飞
王远秋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201610877535.6A priority Critical patent/CN106980579B/zh
Priority to TW106124375A priority patent/TWI691931B/zh
Publication of CN106980579A publication Critical patent/CN106980579A/zh
Priority to PCT/CN2017/102867 priority patent/WO2018059312A1/zh
Priority to MYPI2019001708A priority patent/MY193452A/en
Priority to US16/364,641 priority patent/US10719909B2/en
Priority to PH12019500684A priority patent/PH12019500684A1/en
Application granted granted Critical
Publication of CN106980579B publication Critical patent/CN106980579B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Abstract

本申请公开了一种图片加载方法及装置,可将解码所得的图片数据缓存在本机堆内存,即Native堆内存中,以便图片加载时复用,这样,由于Native堆内存不计算在应用进程的Java堆内存内,因而可有效降低Java堆内存的压力,降低OOM的触发概率,同时,还可达到更好地利用堆内存实现图片缓存,以提高图片加载效率并减少系统GC的效果。

Description

一种图片加载方法及装置
技术领域
本申请涉及图片处理技术领域,尤其涉及一种图片加载方法及装置。
背景技术
对于安卓设备来说,在进行图片加载时,由于解码图片需要占用应用进程大量的Java堆内存,且,安卓系统的应用进程都有一定大小限制,因而当应用进程的Java堆内存使用率较高时,极易出现堆内存不足的现象,从而触发OOM(Out Of Memory,内存耗尽)。
为了解决这一问题,目前可采用图片缓存的方式来减少图片解码,以实现对解码所得图片数据的复用,进而降低Java堆内存的使用率。例如,在从网络或本地资源解码出Bitmap(位图)对象后,可通过使用LinkedHashMap(基于链表、哈希实现的Map数据结构)实现LRU(Least Recently Used,近期最少使用算法)缓存管理,即,将最近使用到的Bitmap对象用强引用保存起来(保存到LinkedHashMap中),当缓存数量达到预定值的时候,将不经常使用的Bitmap对象删除,从而实现对Bitmap对象的复用,提高用户的应用体验。
但是,由于在采用现有的图片缓存方式来实现解码所得图片数据的复用时,仍是在Java层解码出Bitmap对象,并将解码所得的Bitmap对象缓存在Java堆内存,即,缓存的图片数据所占用的内存仍为Java堆内存,从而导致Java堆内存的压力仍较大,在进行图片的解码时,仍极易出现堆内存不足的现象,从而触发OOM。
发明内容
本申请实施例提供了一种图片加载方法及装置,用以解决采用现有的图片缓存方式来实现解码所得图片数据的复用时,由于Java堆内存的压力仍较大从而极易触发OOM的问题。
一方面,本申请实施例提供了一种图片加载方法,包括:
在对图片进行加载时,判断Native堆内存中是否缓存有该图片的解码数据;
若是,则从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载;
若否,则从存储有该图片的存储空间处获取并加载该图片,并将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中。
另一方面,本申请实施例提供了一种图片加载装置,包括:
判断单元,用于在对图片进行加载时,判断Native堆内存中是否缓存有该图片的解码数据;
执行单元,用于若确定Native堆内存中缓存有该图片的解码数据,则从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载;否则,从存储有该图片的存储空间处获取并加载该图片,并将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中。
本申请有益效果如下:
本申请实施例提供了一种图片加载方法及装置,可将解码所得的图片数据缓存在本机堆内存,即Native堆内存中,以便图片加载时复用,这样,由于Native堆内存不计算在应用进程的Java堆内存内,因而可有效降低Java堆内存的压力,降低OOM的触发概率,同时,还可达到更好地利用堆内存实现图片缓存,以提高图片加载效率并减少系统垃圾回收,即系统GC的效果。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1所示为本申请实施例一提供的图片加载方法的一种可能的流程示意图;
图2所示为本申请实施例一提供的图片加载方法的另一种可能的流程示意图;
图3所示为本申请实施例二提供的图片加载装置的一种可能的结构示意图。
具体实施方式
由于对于Android系统来说,堆内存可分为Java堆内存和Native堆内存,且,Native堆内存是不计算在Java堆内存内的,因而,在本申请所述实施例中,可基于这一点将解码所得的图片数据缓存在Native堆内存中,以便图片加载时复用,这样,由于Native堆内存不计算在应用进程的Java堆内存内,因而可有效降低进程的堆内存压力,降低OOM的触发概率,同时,还可达到更好地利用堆内存实现图片缓存,即更好地实现图片解码数据的复用的效果,以提高图片加载效率并减少系统GC,进而提升系统性能。
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
实施例一:
本申请实施例一提供了一种图片加载方法,所述图片加载方法可适用于任何基于Android系统的客户端或终端设备,对此不作限定。具体地,如图1所示,所述图片加载方法可包括以下步骤:
步骤101:在对图片进行加载时,判断Native堆内存中是否缓存有该图片的解码数据,若判断结果为是,则执行步骤102,否则,执行步骤103。
可选地,图片的解码数据通常为对该图片进行解码所得到的Bitmap对象的像素数组数据。另外,由于在本申请所述实施例中,针对任一图片,当将该图片的解码数据缓存到Native堆内存中时,通常会在NativeCacheInfo(本机堆内存缓存记录信息)中生成一对应的记录数据,因而,判断Native堆内存中是否缓存有该图片的解码数据,可执行为:
判断是否能够从NativeCacheInfo中,获取到与该图片的解码数据相对应的记录数据,若判断结果为是,则确定Native堆内存中缓存有该图片的解码数据,否则,则确定Native堆内存中未缓存有该图片的解码数据。
其中,所述NativeCacheInfo中的每一记录数据可包括与该记录数据相对应的图片的宽、高、NativePointer(本机堆内存指针,用于指明该记录数据所对应的解码数据在Native堆内存中的存储地址)、Bitmap.Config(用于指明图片的每个像素所占用的内存大小)、解码数据的数据长度等属性信息。另外,为了便于查找与记录,每一记录数据通常可通过能够唯一标识该记录数据对应的图片的标识信息(或能够唯一标识该记录数据对应的图片的解码数据的标识信息)进行标记,对此不作赘述。
再有,由于NativeCacheInfo所占用的内存通常较小,因而,可将NativeCacheInfo存储于Java堆内存中(当然,为了进一步降低Java堆内存的存储压力,还可将NativeCacheInfo存储于Native堆内存中);并且,可采用LRU对NativeCacheInfo中的各记录数据进行管理,以便达到对NativeCacheInfo中的各记录数据以及堆内存中的图片缓存数据进行实时维护,在对应淘汰相应的记录数据时将Native堆内存中的相应解码数据所占用的内存同步释放,以进一步降低堆内存压力,减少OOM概率的效果。
另外,需要说明的是,在本申请所述实施例中,还可通过其它方式来判断Native堆内存中是否缓存有该图片的解码数据,如,通过对Native堆内存中缓存的数据进行逐条扫描的方式,来判断Native堆内存中是否缓存有该图片的解码数据,对此不作限定。
步骤102:从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载。
可选地,如图2所示,步骤102所述的从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载,具体可包括以下步骤:
步骤102A:判断ImageView(画布)当前显示的Bitmap对象是否满足该图片的解码数据所需的重用条件,若满足,则执行步骤102B,若不满足,则执行步骤102C。
可选地,对于Android 4.4以下版本的系统来说,当ImageView当前显示的Bitmap对象所对应的图片的宽、高、Bitmap.Config,与该图片的解码数据所对应的图片的宽、高、Bitmap.Config完全一致,且,ImageView当前显示的Bitmap对象的属性为mutable(即,可修改)时,可认为ImageView当前显示的Bitmap对象满足该图片的解码数据所需的重用条件,否则,则认为其不满足该图片的解码数据所需的重用条件;
而对于Android4.4及以上版本的系统来说,当ImageView当前显示的Bitmap对象所对应的图片的宽、高、每个像素所占用的内存三者的乘积不小于该图片的解码数据的数据长度时,可认为ImageView当前显示的Bitmap对象满足该图片的解码数据所需的重用条件,否则,则认为其不满足该图片的解码数据所需的重用条件。
步骤102B:将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到ImageView当前显示的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载。
也就是说,当ImageView上已经显示有A图(Bitmap-A)时,若需要显示B图(Bitmap-B),则无需将ImageView上显示的A图移除,再换上B图,而是,只要将B图和ImageView重新绑定,把B图的像素数组数据拷贝到A图上即可,以提高图片加载的效率。
可选地,为了防止ImageView中的老数据有可能干扰新数据的显示,在将该图片的Bitmap对象的像素数组数据拷贝到ImageView当前显示的Bitmap对象中之前,还可首先对ImageView当前显示的Bitmap对象中的像素数组数据进行清除,对此不作赘述。
步骤102C:从ReusableBitmapPool(位图文件池)中获取一符合该图片的解码数据所需的重用条件的Bitmap对象、或者创建一符合该图片的解码数据所需的重用条件的Bitmap对象,并将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到获取到的或者创建的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载。
可选地,如图2所示,在执行步骤102C之前,还可首先将ImageView当前显示的Bitmap对象存放至ReusableBitmapPool中(对应步骤102C’),以便其它图片加载时复用(因为虽然该当前Bitmap对象不一定能满足当前待加载图片的复用条件,但其很有可能能满足其它图片的复用条件),以进一步提高图片加载的效率并减少系统的GC。
其中,所述ReusableBitmapPool通常可位于Java堆内存中、且其引用方式为软引用,以便可以在内存不紧张时,有效地利用原有资源,减少GC,也可以在系统需要内存时,及时释放,不会导致OOM。另外,为了降低堆内存的存储压力,ReusableBitmapPool中存储的各Bitmap对象还可为清除了像素数组数据的Bitmap对象,即为一个可被其它图片复用的Bitmap对象框架。
进一步地,需要说明的是,在执行步骤102C的过程中,可首先判断是否能够从ReusableBitmapPool中获取一符合该图片的解码数据所需的重用条件的Bitmap对象,若是,则无需再执行创建一符合该图片的解码数据所需的重用条件的Bitmap对象的操作(即,可在确定为否时,再执行创建一符合该图片的解码数据所需的重用条件的Bitmap对象的操作),以进一步提高图片加载效率并减少系统的GC。
可选地,通常来说,通过调用系统API并传入要显示的图片的宽、高、Bitmap.Config即可创建一符合该图片的解码数据所需的重用条件的Bitmap对象,对此不作赘述。
再有,需要说明的是,为了防止老数据有可能干扰新数据的显示,在将该图片的Bitmap对象的像素数组数据拷贝到获取到的Bitmap对象或创建的Bitmap对象中之前,若确定获取到的Bitmap对象或创建的Bitmap对象中的像素数组数据不为空,则也可首先对获取到的Bitmap对象或创建的Bitmap对象中的像素数组数据进行清除,对此也不作赘述。
进一步可选地,如图2可知,在从Native堆内存中获取该图片的解码数据之前,所述方法还可包括以下步骤:
步骤104:判断Native堆内存中缓存的该图片的解码数据是否有效,并确定判断结果为是。
即,通常可在判定Native堆内存中缓存的该图片的解码数据有效时,再从Native堆内存中获取该图片的解码数据。
可选地,判断Native堆内存中缓存的该图片的解码数据是否有效,可执行为:
判断NativeCacheInfo中的、与该图片的解码数据相对应的记录数据中的NativePointer是否为有效指针,若判断结果为是,则确定Native堆内存中缓存的该图片的解码数据有效。
另外,由图2可知,若确定Native堆内存中缓存的该图片的解码数据无效,则可直接跳转至步骤103,即执行从存储有该图片的存储空间处获取并加载该图片,并将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中的操作。
进一步地,在从Native堆内存中获取该图片的解码数据之前,所述方法还可包括以下步骤:
若确定ImageView当前显示的Bitmap对象所对应的图片非首次加载,则将ImageView中当前显示的Bitmap对象的像素数组数据取出并缓存到Native堆内存中,以便下一次显示时复用。
另外,如前文所述,当将ImageView中当前显示的Bitmap对象的像素数组数据缓存到Native堆内存中时,可在NativeCacheInfo中生成一对应的记录数据,对此不作赘述。
步骤103:从存储有该图片的存储空间处获取并加载该图片,并将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中。
可选地,存储有该图片的存储空间可为本地磁盘缓存、本地文件或者网络等;且,对获取到的图片进行加载可包括对获取到的图片进行解码得到Bitmap对象,并对Bitmap对象进行渲染等操作。
另外,如前文所述,当将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中时,也可在NativeCacheInfo中生成一对应的记录数据。
至此,即可完成当前待加载图片的加载操作。
由本申请实施例所述内容可知,在本申请所述实施例中,可将解码所得的图片数据缓存在本机堆内存,即Native堆内存中,以便图片加载时复用,这样,由于Native堆内存不计算在应用进程的Java堆内存内,因而可有效降低Java堆内存的压力,降低OOM的触发概率,同时,还可达到更好地利用堆内存实现图片缓存,以提高图片加载效率并减少系统GC的效果。
实施例二:
基于与本申请实施例一中的图片加载方法同样的发明构思,本申请实施例二提供了一种图片加载装置,所述图片加载装置的具体实施可参见上述方法实施例一中的相关描述,重复之处不再赘述,具体地,如图3所示,所述图片加载装置可包括:
判断单元31,可用于在对图片进行加载时,判断Native堆内存中是否缓存有该图片的解码数据;
执行单元32,可用于若确定Native堆内存中缓存有该图片的解码数据,则从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载;否则,从存储有该图片的存储空间处获取并加载该图片,并将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中。
可选地,所述判断单元31具体可用于判断是否能够从本机堆内存缓存记录信息中,获取到与该图片的解码数据相对应的记录数据,若判断结果为是,则确定Native堆内存中缓存有该图片的解码数据。
可选地,所述执行单元32具体可用于在判定Native堆内存中缓存的该图片的解码数据有效时,则从Native堆内存中获取该图片的解码数据。
可选地,所述执行单元32具体可用于判断本机堆内存缓存记录信息中的、与该图片的解码数据相对应的记录数据中的本机堆内存指针是否为有效指针,若判断结果为是,则确定Native堆内存中缓存的该图片的解码数据有效;
其中,所述本机堆内存缓存记录信息中的每一记录数据中的本机堆内存指针用于指明该记录数据所对应的解码数据在Native堆内存中的存储地址。
另外,需要说明的是,所述本机堆内存缓存记录信息可位于Java堆内存中,且,所述本机堆内存缓存记录信息中的各记录数据采用LRU进行管理。
可选地,该图片的解码数据通常可为对该图片进行解码所得到的Bitmap对象的像素数组数据;
所述执行单元32具体可用于判断ImageView当前显示的Bitmap对象是否满足该图片的解码数据所需的重用条件;若满足,则将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到ImageView当前显示的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载;
若不满足,则从位图文件池中获取一符合该图片的解码数据所需的重用条件的Bitmap对象、或者创建一符合该图片的解码数据所需的重用条件的Bitmap对象,并将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到获取到的或者创建的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载;
其中,所述位图文件池位于Java堆内存中、且其引用方式为软引用。
进一步可选地,所述执行单元32还可用于若确定ImageView当前显示的Bitmap对象不满足该图片的解码数据所需的重用条件,则将ImageView当前显示的Bitmap对象存放至所述位图文件池中。
本领域技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (14)

1.一种图片加载方法,其特征在于,包括:
在对图片进行加载时,判断本机堆内存Native堆内存中是否缓存有该图片的解码数据;图片的解码数据为对该图片进行解码所得到的Bitmap对象的像素数组数据;
若是,则从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载;
若否,则从存储有该图片的存储空间处获取并加载该图片,并将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中;
从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载,包括:
判断画布ImageView当前显示的Bitmap对象是否满足该图片的解码数据所需的重用条件;
若满足,则将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到ImageView当前显示的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载。
2.如权利要求1所述的方法,其特征在于,判断Native堆内存中是否缓存有该图片的解码数据,包括:
判断是否能够从本机堆内存缓存记录信息中,获取到与该图片的解码数据相对应的记录数据,若判断结果为是,则确定Native堆内存中缓存有该图片的解码数据。
3.如权利要求1或2所述的方法,其特征在于,在判定Native堆内存中缓存的该图片的解码数据有效时,则从Native堆内存中获取该图片的解码数据。
4.如权利要求3所述的方法,其特征在于,判断Native堆内存中缓存的该图片的解码数据是否有效,包括:
判断本机堆内存缓存记录信息中的、与该图片的解码数据相对应的记录数据中的本机堆内存指针是否为有效指针,若判断结果为是,则确定Native堆内存中缓存的该图片的解码数据有效;
其中,所述本机堆内存缓存记录信息中的每一记录数据中的本机堆内存指针用于指明该记录数据所对应的解码数据在Native堆内存中的存储地址。
5.如权利要求2所述的方法,其特征在于,所述本机堆内存缓存记录信息位于Java堆内存中,且,所述本机堆内存缓存记录信息中的各记录数据采用近期最少使用算法LRU进行管理。
6.如权利要求1或2所述的方法,其特征在于,从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载,还包括:
若画布ImageView当前显示的Bitmap对象不满足该图片的解码数据所需的重用条件,则从位图文件池中获取一符合该图片的解码数据所需的重用条件的Bitmap对象、或者创建一符合该图片的解码数据所需的重用条件的Bitmap对象,并将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到获取到的或者创建的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载;
其中,所述位图文件池位于Java堆内存中、且其引用方式为软引用。
7.如权利要求6所述的方法,其特征在于,若确定ImageView当前显示的Bitmap对象不满足该图片的解码数据所需的重用条件,则所述方法还包括:
将ImageView当前显示的Bitmap对象存放至所述位图文件池中。
8.一种图片加载装置,其特征在于,包括:
判断单元,用于在对图片进行加载时,判断本机堆内存Native堆内存中是否缓存有该图片的解码数据;图片的解码数据为对该图片进行解码所得到的Bitmap对象的像素数组数据;
执行单元,用于若确定Native堆内存中缓存有该图片的解码数据,则从Native堆内存中获取该图片的解码数据,并基于获取到的解码数据实现该图片的加载;否则,从存储有该图片的存储空间处获取并加载该图片,并将加载该图片的过程中所得到的该图片的解码数据缓存到Native堆内存中;
所述执行单元,具体用于判断画布ImageView当前显示的Bitmap对象是否满足该图片的解码数据所需的重用条件;若满足,则将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到ImageView当前显示的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载。
9.如权利要求8所述的装置,其特征在于,
所述判断单元,具体用于判断是否能够从本机堆内存缓存记录信息中,获取到与该图片的解码数据相对应的记录数据,若判断结果为是,则确定Native堆内存中缓存有该图片的解码数据。
10.如权利要求8或9所述的装置,其特征在于,
所述执行单元,具体用于在判定Native堆内存中缓存的该图片的解码数据有效时,则从Native堆内存中获取该图片的解码数据。
11.如权利要求10所述的装置,其特征在于,
所述执行单元,具体用于判断本机堆内存缓存记录信息中的、与该图片的解码数据相对应的记录数据中的本机堆内存指针是否为有效指针,若判断结果为是,则确定Native堆内存中缓存的该图片的解码数据有效。
12.如权利要求9所述的装置,其特征在于,所述本机堆内存缓存记录信息位于Java堆内存中,且,所述本机堆内存缓存记录信息中的各记录数据采用近期最少使用算法LRU进行管理。
13.如权利要求8或9所述的装置,其特征在于,所述执行单元具体还用于:
若画布ImageView当前显示的Bitmap对象不满足该图片的解码数据所需的重用条件,则从位图文件池中获取一符合该图片的解码数据所需的重用条件的Bitmap对象、或者创建一符合该图片的解码数据所需的重用条件的Bitmap对象,并将Native堆内存中缓存的、对该图片进行解码所得到的Bitmap对象的像素数组数据拷贝到获取到的或者创建的Bitmap对象中,得到新的Bitmap对象,并将新的Bitmap对象渲染到ImageView中,以实现该图片的加载;
其中,所述位图文件池位于Java堆内存中、且其引用方式为软引用。
14.如权利要求13所述的装置,其特征在于,
所述执行单元,还用于若确定ImageView当前显示的Bitmap对象不满足该图片的解码数据所需的重用条件,则将ImageView当前显示的Bitmap对象存放至所述位图文件池中。
CN201610877535.6A 2016-09-30 2016-09-30 一种图片加载方法及装置 Active CN106980579B (zh)

Priority Applications (6)

Application Number Priority Date Filing Date Title
CN201610877535.6A CN106980579B (zh) 2016-09-30 2016-09-30 一种图片加载方法及装置
TW106124375A TWI691931B (zh) 2016-09-30 2017-07-20 圖片載入方法及裝置
PCT/CN2017/102867 WO2018059312A1 (zh) 2016-09-30 2017-09-22 一种图片加载方法及装置
MYPI2019001708A MY193452A (en) 2016-09-30 2017-09-22 Image loading method and device
US16/364,641 US10719909B2 (en) 2016-09-30 2019-03-26 Image loading method and device
PH12019500684A PH12019500684A1 (en) 2016-09-30 2019-03-28 Image loading method and device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610877535.6A CN106980579B (zh) 2016-09-30 2016-09-30 一种图片加载方法及装置

Publications (2)

Publication Number Publication Date
CN106980579A CN106980579A (zh) 2017-07-25
CN106980579B true CN106980579B (zh) 2020-08-14

Family

ID=59340415

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610877535.6A Active CN106980579B (zh) 2016-09-30 2016-09-30 一种图片加载方法及装置

Country Status (6)

Country Link
US (1) US10719909B2 (zh)
CN (1) CN106980579B (zh)
MY (1) MY193452A (zh)
PH (1) PH12019500684A1 (zh)
TW (1) TWI691931B (zh)
WO (1) WO2018059312A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980579B (zh) * 2016-09-30 2020-08-14 阿里巴巴集团控股有限公司 一种图片加载方法及装置
CN110555118B (zh) * 2018-03-28 2022-08-16 武汉斗鱼网络科技有限公司 一种加载图片的方法及装置
CN108681472A (zh) * 2018-05-17 2018-10-19 广州优视网络科技有限公司 图片加载方法、装置及电子设备
CN110912801B (zh) * 2018-09-17 2022-05-24 Oppo广东移动通信有限公司 一种检测电子红包的方法、系统及终端设备
CN109859282A (zh) * 2019-02-12 2019-06-07 深圳市技达信息技术有限公司 访问图片的方法
CN110175053B (zh) * 2019-04-24 2023-10-27 创新先进技术有限公司 图片加载方法及装置
CN112132599A (zh) * 2019-06-24 2020-12-25 北京沃东天骏信息技术有限公司 图像处理方法及装置、计算机可读存储介质、电子设备
CN112948728A (zh) * 2019-11-26 2021-06-11 北京沃东天骏信息技术有限公司 一种浏览图片的方法和装置
CN112925654B (zh) * 2019-12-05 2024-01-30 腾讯科技(深圳)有限公司 图片解码方法、装置、计算机设备及存储介质
CN111292387B (zh) * 2020-01-16 2023-08-29 广州小鹏汽车科技有限公司 动态图片的加载方法、装置、存储介质及终端设备
CN112363778B (zh) * 2020-11-19 2023-03-24 微医云(杭州)控股有限公司 一种动态图片加载方法、装置、电子设备以及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657380A (zh) * 2013-11-20 2015-05-27 青岛海信移动通信技术股份有限公司 一种图片加载方法和装置
CN105550246A (zh) * 2015-12-08 2016-05-04 四川长虹电器股份有限公司 Android平台下加载网络图片的系统及方法

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5909559A (en) 1997-04-04 1999-06-01 Texas Instruments Incorporated Bus bridge device including data bus of first width for a first processor, memory controller, arbiter circuit and second processor having a different second data width
AU2002305392A1 (en) * 2001-05-02 2002-11-11 Bitstream, Inc. Methods, systems, and programming for producing and displaying subpixel-optimized images and digital content including such images
TW200518070A (en) 2003-10-10 2005-06-01 Matsushita Electric Ind Co Ltd Recording medium, reproduction device, program, and reproduction method
JP2007536634A (ja) 2004-05-04 2007-12-13 フィッシャー−ローズマウント・システムズ・インコーポレーテッド プロセス制御システムのためのサービス指向型アーキテクチャ
AU2012202934B2 (en) 2004-05-11 2013-08-01 Panasonic Corporation An Integrated Circuit and a Method for Decoding a Digital Stream
US7506338B2 (en) 2004-08-30 2009-03-17 International Business Machines Corporation Method and apparatus for simplifying the deployment and serviceability of commercial software environments
US8306386B2 (en) 2004-12-01 2012-11-06 Panasonic Corporation Reproduction device, image synthesis method, image synthesis program, and integrated circuit
GB0608936D0 (en) 2006-05-05 2006-06-14 Omnifone Ltd Musicstation client architecture highlights
CN101542622A (zh) 2007-02-28 2009-09-23 松下电器产业株式会社 再现装置、再现方法、系统大规模集成电路
US20090006506A1 (en) * 2007-06-28 2009-01-01 Nokia Corportion Method and system for garbage collection of native resources
US8380042B2 (en) 2008-04-16 2013-02-19 Panasonic Corporation Reproduction device, reproduction method, and program
EP2293553B1 (en) 2008-06-26 2013-09-11 Panasonic Corporation Recording medium, reproducing device, recording device, reproducing method, recording method, and program
EP2306749B1 (en) 2008-07-24 2017-04-12 Panasonic Intellectual Property Management Co., Ltd. Playback device capable of stereoscopic playback, playback method, and program
CN101911713B (zh) 2008-09-30 2014-01-08 松下电器产业株式会社 再现装置、集成电路、再现方法、记录方法、记录介质再现系统
US7987407B2 (en) * 2009-08-20 2011-07-26 Arm Limited Handling of hard errors in a cache of a data processing apparatus
CN101729753B (zh) * 2009-11-06 2011-09-28 深圳市同洲电子股份有限公司 一种java应用中加载图片的方法和装置
US9069876B2 (en) 2011-05-25 2015-06-30 Nokia Corporation Memory caching for browser processes
CN103155547B (zh) 2011-08-10 2017-04-12 松下知识产权经营株式会社 能够以高帧率记录逐行图片的记录介质、再现装置、记录装置、再现方法、记录方法
US20160048307A1 (en) * 2011-09-23 2016-02-18 Zynga Inc. Systems and methods dynamic localization of a client device
US8280197B1 (en) * 2012-02-29 2012-10-02 Google Inc. Managed background loading of image resources in resource-constrained devices
US9501415B1 (en) * 2012-10-09 2016-11-22 Amazon Technologies, Inc. Image caching system to support fast scrolling of images in a graphical user interface
US9377940B2 (en) * 2013-02-28 2016-06-28 Facebook, Inc. Predictive pre-decoding of encoded media item
CN105046640A (zh) * 2015-05-14 2015-11-11 深圳市美贝壳科技有限公司 图片内存管理方法及装置
CN104965708B (zh) * 2015-06-30 2018-09-28 北京奇艺世纪科技有限公司 一种应用程序运行过程的内存管理方法及装置
US10423527B2 (en) 2015-11-12 2019-09-24 Facebook, Inc. Memory management and image display for mobile devices
CN105808356A (zh) * 2016-03-11 2016-07-27 广州市久邦数码科技有限公司 一种基于安卓系统的Bitmap重复利用方法及其系统
CN106980579B (zh) * 2016-09-30 2020-08-14 阿里巴巴集团控股有限公司 一种图片加载方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657380A (zh) * 2013-11-20 2015-05-27 青岛海信移动通信技术股份有限公司 一种图片加载方法和装置
CN105550246A (zh) * 2015-12-08 2016-05-04 四川长虹电器股份有限公司 Android平台下加载网络图片的系统及方法

Also Published As

Publication number Publication date
PH12019500684A1 (en) 2019-11-04
CN106980579A (zh) 2017-07-25
US10719909B2 (en) 2020-07-21
TW201814649A (zh) 2018-04-16
US20190220950A1 (en) 2019-07-18
WO2018059312A1 (zh) 2018-04-05
MY193452A (en) 2022-10-13
TWI691931B (zh) 2020-04-21

Similar Documents

Publication Publication Date Title
CN106980579B (zh) 一种图片加载方法及装置
US10114740B2 (en) Memory management techniques
KR101361945B1 (ko) 컴퓨터 스레드들의 이종 리소스들로의 맵핑
CN106547624B (zh) 基于Android的图片加载方法及装置
TWI539280B (zh) 用於分析未經特定設計以提供記憶體分配資訊之應用程式及擷取記憶體分配資訊的方法、及其電腦系統和電腦可讀儲存媒體
CN103760966A (zh) 一种实现图形缓冲的方法
US20110213954A1 (en) Method and apparatus for generating minimum boot image
US10860377B2 (en) Technologies for identifying thread memory allocation
CN111966492B (zh) 内存回收方法、装置、电子设备及计算机可读存储介质
US8872839B2 (en) Real-time atlasing of graphics data
CN109685712B (zh) 图像缓存和使用方法及装置、终端
US20140372568A1 (en) Systems and methods for transmitting data
CN107145451B (zh) 一种JavaScript对象存储、回收方法及装置
CN106570060B (zh) 一种信息流中数据的随机抽取方法及装置
KR20140004240A (ko) 이미지 검색 방법, 시스템 및 컴퓨터 기록매체
JP5817052B2 (ja) 情報処理装置、制御方法、プログラム、及び記録媒体
CN106204668B (zh) 图片解码方法和装置
CN110825652B (zh) 淘汰磁盘块上的缓存数据的方法、装置及设备
CN115629870A (zh) 一种用于渲染的方法、装置、存储介质及电子设备
CN105912480A (zh) 缓存管理方法、装置和移动终端
JP2007094871A (ja) メモリ管理装置及びメモリ管理方法
CN111467797A (zh) 游戏数据处理方法、装置、计算机存储介质与电子设备
CN110580731A (zh) 3d文字渲染方法、介质、设备及装置
CN106650480B (zh) 文件访问隔离方法和装置
CN111258929B (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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200921

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20200921

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Advanced innovation technology Co.,Ltd.

Address before: Cayman Islands Grand Cayman capital building, a four storey No. 847 mailbox

Patentee before: Alibaba Group Holding Ltd.