diff --git a/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt b/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt index 557845ea..8e60c24a 100644 --- a/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt +++ b/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt @@ -84,7 +84,7 @@ open class SVGAImageView : ImageView { } } typedArray.getString(R.styleable.SVGAImageView_source)?.let { - ParserSourceThread(this, it).start() + SVGAParser.threadPoolExecutor.execute(SyncSourceParser(this, it)) } typedArray.recycle() } @@ -277,11 +277,11 @@ open class SVGAImageView : ImageView { /** * 解析资源线程,不持有外部引用 */ - private class ParserSourceThread(view: SVGAImageView, val source: String) : Thread() { + private class SyncSourceParser(view: SVGAImageView, val source: String) : Runnable { /** * 使用弱引用解决内存泄漏 */ - private val weakReference = WeakReference(view) + private val weakReference = WeakReference(view) private val parser = SVGAParser(view.context) override fun run() { @@ -301,7 +301,7 @@ open class SVGAImageView : ImageView { override fun onError() {} } } - } // end of ParserSourceThread + } // end of SyncSourceParser private class AnimatorListener(view: SVGAImageView) : Animator.AnimatorListener { private val weakReference = WeakReference(view) diff --git a/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt b/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt index 2abd0a42..9bbd72b2 100644 --- a/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt +++ b/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt @@ -3,6 +3,7 @@ package com.opensource.svgaplayer import android.content.Context import android.net.http.HttpResponseCache import android.os.Handler +import android.os.Looper import android.util.Log import com.opensource.svgaplayer.proto.MovieEntity import org.json.JSONObject @@ -91,6 +92,7 @@ class SVGAParser(context: Context?) { threadPoolExecutor = executor } private var mShareParser = SVGAParser(null) + private val mMainHandler = Handler(Looper.getMainLooper()) fun shareParser(): SVGAParser { return mShareParser } @@ -189,7 +191,8 @@ class SVGAParser(context: Context?) { if (mContextRef.get() == null) { Log.e("SVGAParser", "在配置 SVGAParser context 前, 无法解析 SVGA 文件。") } - Handler(mContextRef.get()?.mainLooper).post { + + mMainHandler.post { callback?.onComplete(videoItem) } } @@ -199,7 +202,8 @@ class SVGAParser(context: Context?) { if (mContextRef.get() == null) { Log.e("SVGAParser", "在配置 SVGAParser context 前, 无法解析 SVGA 文件。") } - Handler(mContextRef.get()?.mainLooper).post { + + mMainHandler.post { callback?.onError() } }