According to Fabric documentation Fabric doc to reduce user traffic, caught exceptions are sent only when the app launches -
Crashlytics processes exceptions on a dedicated background thread, so the performance impact to your app is minimal. To reduce your users’ network traffic, Crashlytics batches logged exceptions together and sends them the next time the app launches.
try {
myMethodThatThrows();
} catch (Exception e) {
Crashlytics.logException(e);
// handle your exception here!
}
But for this particular app, the app will be always on, and is not intended to be relaunched. So the question is -
How to force the logs to be sent after some time, or on some event?
Mike from Fabric here.
Currently our SDK doesn't offer a way to manually flush or push over the logs from a running Android app. Logged exceptions are sent on relaunch of the app.
I've created some kind of simple solution. Now reports are sent after restarting app. What if user won't restart app because gets an error? It's possible.
So if we want to send logs after closing app, we need to create simple "sticky" service.
And lets put
startService(new Intent(context, ReportService.class));
line inonCreate
method of main activity.Now when app will close, service will launch code again - Crashlytics will send logged exceptions.