Tencent / Tencent/libpag

Android 4.3.47 setPathAsync NetworkOnMainThreadException

Open
#2,220 1 comment 0 reactions 1 assignee View on GitHub

@kevingpqi123 is already working on this.

Since Mar 25, 2024.

Dominant language
HTML
Stars
5.8k
Forks
531
Avg merge
8d 55m
Merged PRs (30d)
17

Description

【版本信息】

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及附件】

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.