1. 程式人生 > >幀動畫載入大量圖片OOM的解決辦法

幀動畫載入大量圖片OOM的解決辦法

這是在別人程式碼基礎上更改的。
程式碼如下:


public class SceneAnimation {

    /**
     * target imageView
     */
    private ImageView mImageView;

    /**
     * frame resources
     */
    private int[] mFrameRes = null;

    /**
     * different duration in frame
     */
    private int[] mDurations = null;

    /**
     * specific duration
     */
private long mDuration; private int mCurrentFrame; private boolean mStop; private boolean mRepeat; private boolean mSpecificDuration; private Runnable mAction = null; private OnFramePlayListener mListener; public interface OnFramePlayListener{ void onFrame(int
frame); void onEnd(); } public SceneAnimation(ImageView pImageView, int[] pFrameRes, int pDuration) { initialize(pImageView, pFrameRes); mDuration = pDuration; mSpecificDuration = true; } public SceneAnimation(ImageView pImageView, int[] pFrameRes, int
[] pDurations) { initialize(pImageView, pFrameRes); mDurations = pDurations; mSpecificDuration = false; } private void initialize(ImageView pImageView, int[] pFrameRes) { mImageView = pImageView; mFrameRes = pFrameRes; mCurrentFrame = 0; mStop = false; mRepeat = false; } /** * @return the total time of animation */ public long getTotalTime(){ if(mFrameRes != null) { if (mSpecificDuration) { return mDuration * (mFrameRes.length - 1); } else if(mDurations != null){ long totalTime = 0; for (int i = 0; i < mDurations.length; i++) { totalTime += mDurations[i]; } return totalTime; }else{ return 0; } } return 0; } public void setRepeat(boolean mRepeat) { this.mRepeat = mRepeat; } public void setOnFramePlayListener(OnFramePlayListener mListener) { this.mListener = mListener; } @SuppressWarnings("deprecation") private void setBackground(View view, Drawable drawable) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { view.setBackgroundDrawable(drawable); } else { view.setBackground(drawable); } } private void doPlay(){ if(null == mImageView) return; mImageView.postDelayed(mAction = new Runnable() { public void run() { if(mCurrentFrame < mFrameRes.length && !mStop) { setBackground(mImageView, ContextCompat.getDrawable(mImageView.getContext(), mFrameRes[mCurrentFrame])); if(mListener != null){ mListener.onFrame(mCurrentFrame); if(mCurrentFrame == mFrameRes.length - 1){ mListener.onEnd(); } } mCurrentFrame++; doPlay(); }else if(mRepeat && !mStop){ startPlay(); } } }, getDelayTime()); } /** * 由於都是大圖片所以動畫播放過程中會頻繁gc * 所以動畫時間間隔需要縮短,暫時沒想到更好的辦法,只是 * 把時間間隔縮短為原來的65%比較接近我們期望的動畫時長 * @return */ private long getDelayTime() { if(mSpecificDuration) return (long)(mDuration * 0.65d); else{ if(mCurrentFrame - 1 < mDurations.length){ return (long)(mDurations[mCurrentFrame - 1] * 0.65d); }else{ return 0; } } } public void startPlay(){ if(mFrameRes != null) { mCurrentFrame = 0; setBackground(mImageView, ContextCompat.getDrawable(mImageView.getContext(), mFrameRes[mCurrentFrame])); mCurrentFrame++; doPlay(); } } /** * 停止動畫,釋放資源 */ public void stopImmediately() { if(mImageView != null){ mStop = true; if(mAction != null) { mImageView.removeCallbacks(mAction); mAction = null; } } } }

相關推薦

動畫載入大量圖片OOM解決辦法

這是在別人程式碼基礎上更改的。 程式碼如下: public class SceneAnimation { /** * target imageView */ private ImageView mImageView;

Glide 3.7.0 載入https 圖片解決辦法

需要的依賴如下 compile 'com.squareup.okhttp3:okhttp:3.3.1' compile 'com.github.bumptech.glide:glide:3.7.0' 需要以下三個類 OkHttpStr

Android逐動畫,逐動畫載入圖片過多時OOM異常的解決和替代方法

1.首先新增逐幀動畫 播放逐幀動畫,在工程中res目錄下建立一個anim資料夾,新增動畫anim_welcome.xml檔案如下: <?xml version="1.0" encoding="utf-8"?> <animation-li

android載入大量圖片記憶體溢位的三種解決辦法

方法一: 在從網路或本地載入圖片的時候,只加載縮圖。   /** * 按照路徑載入圖片 * @param path 圖片資源的存放路徑 * @param scalSize 縮小的倍數 * @return */ public s

Android DrawableAnimation逐動畫載入多圖(OOM解決

想做一個逐幀動畫,用了一百來張圖片,結果記憶體溢位了,找了半天最後算是解決了。 本來是在drawable裡面寫一個animation-list,設定ImageView的backgroud, 然後在Activity裡面animationDrawable = (Animatio

apache 下 圖片顯示不完整 JS檔案載入不完全的解決辦法

 最近用apache除錯程式的時候總莫名其妙的出現JS錯誤, firebug檢視JS顯示JS根本就沒載入完,還有圖片顯示不完整的問題如下圖: 後在在網上找到了解決的辦法: apache的一個bug造成的。到apache的主配置檔案httpd.conf裡將下面一條指令前的#去掉即可。 Enabl

Android GridView載入大量圖片時出現OOM情況

最近寫的一個應用涉及到使用GridView顯示圖片,當使用BaseAdapter傳統的的實現時,在真機上快速滾動時會出現OOM情況。 一個臨時性的解決方案就是改動圖片尺寸,減小記憶體。這種方法簡單卻不

Android相簿解決載入大量圖片卡頓問題

Android開發中載入相簿是很常用的功能,但相簿圖片過多正常載入會產生卡頓,即便使用執行緒非同步載入圖片卡頓問題依然得不到改善。 正常程式碼: public class AlbumAdapter extends ?{ @Override

android很多圖片做成動畫造成記憶體溢位的解決方法。

package com.familydoctor.widget; import android.os.Handler; import android.util.Log; import android.widget.ImageView; import com.familydo

Android SketchImageView 載入Gif圖片解決介面不流暢卡頓問題

遇到的問題 列表載入gif圖片,用Fresco,Glide,android-gif-drawable等都能實現簡單的單個Gif圖片的載入,如果在列表上載入圖片,不做記憶體優化處理,那麼OOM就會黏著你,對於專案比較緊急,時間有限的童鞋來說,優化無疑是雪上加霜,SO,那麼給大家推薦一個簡單載入Gi

Win10視窗載入不完整的解決辦法

方法摘錄如下 step1:開啟登錄檔 WIN+R,或者執行裡面輸入regedit step2:路徑[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]將原來的: "Microsoft YaH

vue-cli 腳手架、vue元件引入圖片出錯解決辦法

問題:vue-cli腳手架中 元件相互巢狀,圖片路徑報錯。 解決辦法:首先把圖片引入進來,然後再付給data(); <template> <img :src="picUrl"/> </template> <style> <

Win10 環境 Vs 2010未能正確載入 WorkFlowPackage包,解決辦法

在安裝K2 BalckPeral4.6時,安裝完成後,開啟VS2010 ,總是報未能正確載入WorkFlowPackage包,網上搜索了一遍,也沒找到相關的解決方案,在經過網上所說的各種嘗試後,最終也未能解決。後來,一個巧合,先解除安裝K2,重灌,然後解除安裝Vs2010,重灌。安裝完成後,有把K2

【總結】 Nginx大量TIME_WAIT的解決辦法

在阿里雲預設的系統TCP引數情況下,會導致大量的TIME_WAIT出現 檢視 優化方法 修改核心引數 # vi /etc/sysctl.conf   net.ipv4.tcp_syncookies = 1

CPU劇烈週期波動---services.exe的CPU佔用 來回波動,佔用大量CPU 的解決辦法

系統:windows 7 現象:偶爾出現: 開機後,還未開啟很多軟體,但CPU佔用率 波動很大,從10%---90% 來回波動,導致 正常操作 困難,顯得電腦異常緩慢。 通過工作管理員 進行觀察,發現主要是 services.exe 的cpu佔用率 波動很大,週期性的迴圈波

Android滑動列表載入大量圖片時候的優化

1 正在滾動的時候停止載入圖片2 滾動到頂部和底部的時候,載入圖片3 滑動速度降低到一定速率的時候,載入圖片4 到底部時候載入更多/** * Created by android on 2018/1/9. * * 快速滑動時候,停止載入圖片, 載入更多 */ publi

os X下mds_stores佔用大量cpu的解決辦法

有時候發現, MacOS中, 有個叫做mds_stores的程序佔了好多CPU, 於是要阻止這個行為, 據說這是MacOS在建索引然後只要把這個索引的關掉就好了 sh-3.2# mdutil -a -i off /:Indexing disabled.sh-3.2# ▊

VS2010打不開VS2012 .NET MVC 工程,及開啟後部分模組載入不正確的解決辦法

首先,如果sln開啟不正確,用(notepad++)開啟sln 比如 VS2010的前兩行為: Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 VS2008的前

win10開機卡在載入介面問題的解決辦法

【問題描述】 自用的thinkpad渣系列本子,有很大的概率,在開機後顯示藍色windows標誌,或者轉圈載入的時候,會卡住。 出現此類情況的時候,需要按下關機鍵(短按關機鍵即可完成關機,不需要長按),然後重新開機,可以進入系統。 【解決方案】 本來出現的也不頻繁,最近不

DEDECMS上傳圖片出錯解決辦法

在使用DEDECMS織夢內容管理系統上傳圖片時,會出現upload filetype not allow的提示,圖片無法上傳。  出現這種情況的原因完全是系統程式碼不完善、存在小紕漏造成的。 首先:開