summaryrefslogtreecommitdiff
path: root/core/java/android/app/RemoteServiceException.java
Commit message (Collapse)AuthorAgeFilesLines
* Stop using CannotDeliverBroadcastExceptionLi Li2022-11-191-19/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a squashed CL. Due to significant BroadcastQueue rearchitecture in master branch, the original CL can't be directly cherry-picked here. This CL combines code from the following CLs: ag/20498660 Stop using CannotDeliverBroadcastException ag/20516440 Add killing subreason for undelivered broadcast === Original commit message === This crash behavior was introduced a long time ago to show a crash dialog if the broadcast couldn't be delivered (b/28196243). Android has changed a lot since then. The crash dialog won't be shown to the user as it impacts user experience, especially when the app is in the background. Furthermore, this CannotDeliverBroadcastException crashes the app with the same callstack, without any useful information for app developers to debug the issue. And it pollutes the app crashlytics stats in a negative way so app developers choose to suppress it (b/245258072). This exception is hidden and not documented at developers.android.com. Let's stop sending it to apps. Kill the app gently instead (as what's already mentioned in the comments). Bug: 239419108 Test: atest ApplicationExitInfoTest Test: atest BroadcastQueueTest Test: observe app is killed gently on failed broadcast (instead of crash) Test: use up async buffer, broadcast & dumpsys activity exit-info Change-Id: I93aabe99167105111f9f3bd945cf4977cfb8cdb1 Merged-In: I93aabe99167105111f9f3bd945cf4977cfb8cdb1
* ForegroundServiceDidNotStartInTimeException now has...Makoto Onuki2021-11-181-2/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | an inner exception that captures the stacktrace where Context.startForegroundService() was called last time, from the same process. Bug: 124137635 Test: Manual test with a tesapp. 1: when startForegroundService() is called by the same process: ``` 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: FATAL EXCEPTION: main 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: Process: com.google.omakoto.testapp, PID: 9545 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{e7674af u0 com.google.omakoto.testapp/.MyFgs3} 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread.generateForegroundServiceDidNotStartInTimeException(ActivityThread.java:1965) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread.throwRemoteServiceException(ActivityThread.java:1934) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread.access$2700(ActivityThread.java:255) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2190) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7839) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: Caused by: android.app.StackTrace: Last startServiceCommon() call for this service was made here 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1868) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ContextImpl.startForegroundService(ContextImpl.java:1823) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.content.ContextWrapper.startForegroundService(ContextWrapper.java:779) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.content.ContextWrapper.startForegroundService(ContextWrapper.java:779) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at com.google.omakoto.testapp.MyReceiver.onReceive(MyReceiver.java:53) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread.handleReceiver(ActivityThread.java:4345) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread.access$1600(ActivityThread.java:255) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2102) 11-17 17:00:12.483 10241 9545 9545 E AndroidRuntime: ... 7 more ``` Test: Manual test with a tesapp. 1: when startForegroundService() is called by another process: ``` 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: FATAL EXCEPTION: main 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: Process: com.google.omakoto.testapp:second, PID: 9432 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{dcaa127 u0 com.google.omakoto.testapp/.MyFgs3} 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.app.ActivityThread.generateForegroundServiceDidNotStartInTimeException(ActivityThread.java:1965) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.app.ActivityThread.throwRemoteServiceException(ActivityThread.java:1934) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.app.ActivityThread.access$2700(ActivityThread.java:255) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2190) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7839) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 11-17 16:59:34.456 10241 9432 9432 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) ``` Change-Id: I2dd8ec76213d53728eaa8fcc3760813d82a328a5
* Use different exceptions for different crash reasonsMakoto Onuki2021-11-161-7/+96
| | | | | | | | | | | | | | Always throwing RemoteServiceException would make it impossible to tell the cause of a crash without the string message. Let's use a different exception type so developers can cluster crashes without the exception message. Bug: 124137635 Bug: 172001574 Test: Treehugger Change-Id: If04f8c66efcc32a5200efa70ea20d97e13006039
* Use descriptive exception for FGS start timeoutMakoto Onuki2021-04-061-0/+38
If the app doesn't call startForeground() in time, throw a new exception ForegroundServiceDidNotStartInTimeException. Test: Manual test with a test app: 04-01 15:24:39.438 10293 9078 9078 E AndroidRuntime: FATAL EXCEPTION: main 04-01 15:24:39.438 10293 9078 9078 E AndroidRuntime: Process: com.google.omakoto.testapp, PID: 9078 04-01 15:24:39.438 10293 9078 9078 E AndroidRuntime: android.app.ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{92c1599 u0 com.google.omakoto.testapp/.MyFgs} 04-01 15:24:39.438 10293 9078 9078 E AndroidRuntime: at android.app.ActivityThread.throwRemoteServiceException(ActivityThread.java:1894) Bug: 124137635 Change-Id: I7d97e15ba47a32a242fb461e7312adf3f28ab3a6