From d9998d16182712eda112d7dd3beb292e24c73323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=82=E8=87=BB=E5=AE=87?= Date: Sat, 23 May 2020 13:22:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BA=BF=E7=A8=8B=E4=BD=BF?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/opensource/svgaplayer/SVGAImageView.kt | 8 ++++---- .../src/main/java/com/opensource/svgaplayer/SVGAParser.kt | 8 ++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) 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() } }