Android Fabric - send Caught Exceptions at custom

2019-06-09 11:49发布

问题:

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?

回答1:

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.



回答2:

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.

public class ReportService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        System.err.println("ReportService refresh");
        return START_STICKY;
    }
}

And lets put startService(new Intent(context, ReportService.class)); line in onCreate method of main activity.

Now when app will close, service will launch code again - Crashlytics will send logged exceptions.