Library/acitvity crashes when power button is pressed

Open
#239 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
42/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
android, java, kotlin
Domain
mobile-dev

Research direction

Reproduce the crash by pressing the power button during streaming on Android 13, then inspect MjpegViewDefault.java, MjpegSurfaceView.java, and ShowVideoActivity.kt:206, especially the stopPlayback path from onPause. Done means the activity can pause without a NetworkOnMainThreadException while streaming remains safely stopped.

Written by the indexing model from the issue text.

Description

Hi,
I am trying to make a POC using your library but I have encountered a hard crash whenever the user presses the power button of the device (Samsung XCover 5 running Android 13) whilst streaming a video. This happens continuesly so it's easy to reproduce. I also was able to reproduce this on the Android Emulator running A13.

I also cloned the project, build and installed the app and I am still getting the same crash and log output !

It seems like network connectivity is happening on the main Thread, which StrictMode doesn't like ?

The error which is being thrown is the following :

--------- beginning of crash
2023-04-20 10:25:13.504 16791-16791/com.company.videopoc E/AndroidRuntime: FATAL EXCEPTION: main
  Process:com.company.videopoc, PID: 16791
  java.lang.RuntimeException: Unable to pause activity {com.company.videopoc/com.company.videopoc.ui.ShowVideoActivity}: android.os.NetworkOnMainThreadException
      at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:5704)
      at android.app.ActivityThread.performPauseActivity(ActivityThread.java:5655)
      at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:5607)
      at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:47)
      at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
      at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2571)
      at android.os.Handler.dispatchMessage(Handler.java:106)
      at android.os.Looper.loopOnce(Looper.java:226)
      at android.os.Looper.loop(Looper.java:313)
      at android.app.ActivityThread.main(ActivityThread.java:8741)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
   Caused by: android.os.NetworkOnMainThreadException
      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1667)
      at com.android.org.conscrypt.Platform.blockGuardOnNetwork(Platform.java:431)
      at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:836)
      at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readUntilDataAvailable(ConscryptEngineSocket.java:824)
      at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:797)
      at com.android.okhttp.okio.Okio$2.read(Okio.java:138)
      at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:213)
      at com.android.okhttp.okio.RealBufferedSource.request(RealBufferedSource.java:72)
      at com.android.okhttp.okio.RealBufferedSource.require(RealBufferedSource.java:65)
      at com.android.okhttp.okio.RealBufferedSource.readHexadecimalUnsignedLong(RealBufferedSource.java:271)
      at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.readChunkSize(Http1xStream.java:456)
      at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.read(Http1xStream.java:437)
      at com.android.okhttp.internal.Util.skipAll(Util.java:165)
      at com.android.okhttp.internal.Util.discard(Util.java:147)
      at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.close(Http1xStream.java:474)
      at com.android.okhttp.okio.RealBufferedSource.close(RealBufferedSource.java:397)
      at com.android.okhttp.okio.RealBufferedSource$1.close(RealBufferedSource.java:385)
      at com.google.firebase.perf.network.InstrHttpInputStream.close(InstrHttpInputStream.java:67)
      at java.io.BufferedInputStream.close(BufferedInputStream.java:485)
      at java.io.FilterInputStream.close(FilterInputStream.java:180)
      at com.github.niqdev.mjpeg.MjpegViewDefault._stopPlayback(MjpegViewDefault.java:143)
      at com.github.niqdev.mjpeg.MjpegViewDefault.stopPlayback(MjpegViewDefault.java:283)
      at com.github.niqdev.mjpeg.MjpegSurfaceView.stopPlayback(MjpegSurfaceView.java:136)
      at com.company.videopoc.ui.ShowVideoActivity.onPause(ShowVideoActivity.kt:206)
      at android.app.Activity.performPause(Activity.java:8765)
      at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1585)
      at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:5694)
      at android.app.ActivityThread.performPauseActivity(ActivityThread.java:5655) 
      at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:5607) 
      at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:47) 
      at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45) 
      at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2571) 
      at android.os.Handler.dispatchMessage(Handler.java:106) 
      at android.os.Looper.loopOnce(Looper.java:226) 
      at android.os.Looper.loop(Looper.java:313) 
      at android.app.ActivityThread.main(ActivityThread.java:8741) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067) 
Dominant language
Java
Stars
438
Forks
161
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

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.

More from niqdev/ipcam-view

All issues in niqdev/ipcam-view

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.