Automatic crash detection for unhandled exceptions

If not disabled explicitly by setting GermainAPMConfiguration.setAutomaticUnhandledExceptionsMonitoring(false), detection of unhandled exceptions is automatically enabled and working once the Germain UX gets initiated. In addition we automatically collect Application Closed and Application Uptime events when a crash occurs. 

Germain UX will collect the following categories of crashes if Android Os throws related unhandled exception:

  • Disk Write crash

  • Disk Read crash

  • Network Operation crash

  • Custom Slow Call

  • Resource Mismatch

  • Unbuffered IO

  • Cursor Leak

  • Closeable Leak

  • Activity Leak

  • Instance Leak

  • Registration Leak

  • File URI Exposure

  • Cleartext Network crash

  • Content URI Without Permission

  • Untagged Socket crash

  • Non SDK API Usage

If needed you can also collect a crash explicitly by calling the following code (that will also collect Application Closed and Application Uptime events so if you don't want to collect these better call GermainAPM.collectError() or GermainAPM.collectException()):

Java:

// ...
GermainAPM.collectCrash("CustomCrashName", e, false); // a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
// ...
JAVA

Kotlin:

// ...
GermainAPM.collectCrash("CustomCrashName", e, false) // a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
// ...
JAVA

Handled exception notification

You can collect an exception explicitly by adding the following code to your handled exception logic.

Simplest integration example:

Java:

try {
	URL url = new URL("localhost");
} catch (MalformedURLException e) {
    GermainAPM.collectException(e); // Just Throwable and we will do the rest
    // application handled exception code here
}
JAVA

Kotlin:

try {
	URL url = new URL("localhost");
} catch (e: MalformedURLException) {
    GermainAPM.collectException(e) // Just Throwable and we will do the rest
    // application handled exception code here
}
JAVA

Custom integration example:

Java:

try {
	URL url = new URL("localhost");
} catch (MalformedURLException e) {
    GermainAPM.collectException("CustomExceptionName", e, false); // More control as we can set a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
    // application handled exception code here
}
JAVA

Kotlin:

try {
	URL url = new URL("localhost")
} catch (e: MalformedURLException) {
    GermainAPM.collectException("CustomExceptionName", e, false) // More control as we can set a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
    // application handled exception code here
}
JAVA

Error notification

You can collect an error event explicitly by adding the following code to your code:

Java:

if(wrong_condition or value_is_wrong or an_error_occured_but_we_dont_throw_exception or ...){
    GermainAPM.collectError("CustomErrorName", "CustomErrorContent");
    // application logic here
}
JAVA

Kotlin:

if(wrong_condition or value_is_wrong or an_error_occured_but_we_dont_throw_exception or ...){
    GermainAPM.collectError("CustomErrorName", "CustomErrorContent")
    // application logic here
}
JAVA

Component: Mobile App

Feature Availability: 8.6.0 or later