Tencent / libpag

The official rendering library for PAG (Portable Animated Graphics) files that renders After Effects animations natively across multiple platforms.
https://pag.art
Other
4.73k stars 437 forks source link

Android 4.3.47 setPathAsync NetworkOnMainThreadException #2220

Open zengke328 opened 1 month ago

zengke328 commented 1 month ago

【版本信息】

4.3.47

【平台信息】

Android 原生

【预期的表现】

PAG加载不报错。

【实际的情况】

使用PAGImageView的setPathAsync()异步加载网络pag,加载成功后调用play()播放动画。 setPathAsync(url) { pagFile -> post { onComplete() play() } }

但是在Firebase上有NetworkOnMainThreadException报错,如下: Fatal Exception: android.os.NetworkOnMainThreadException: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1605) at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115) at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103) at java.net.InetAddress.getAllByName(InetAddress.java:1152) at com.android.okhttp.Dns$1.lookup(Dns.java:41) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:178) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:144) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:86) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:176) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30) at org.libpag.b.a(SourceFile:12) at org.libpag.PAGFile.Load(SourceFile:2) at org.libpag.PAGImageView.a(SourceFile:7) at org.libpag.PAGImageView.f(SourceFile:4) at org.libpag.PAGImageView.flush(SourceFile:2) at org.libpag.PAGImageView.onAnimationUpdate(SourceFile:7) at org.libpag.PAGAnimator.a(SourceFile:6) at org.libpag.PAGImageView.play(SourceFile:1) at com.oversea.commonmodule.widget.RawPagSmallImageView.loadPag$lambda$4$lambda$3(RawPagSmallImageView.kt:90) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:257) at android.app.ActivityThread.main(ActivityThread.java:8220) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)

看了下流程,play()调用了animator.start(),触发了flush()操作,然后内部判断_composition为空又去网络重新下载,按理说setPathAsync返回成功肯定是资源文件已经有了。 image

【Demo及附件】

zengke328 commented 1 month ago

大佬们,帮忙看看