28
eXtreme eXception eXpectation

eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

Embed Size (px)

Citation preview

Page 1: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

eXtreme eXception eXpectation

Page 2: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak
Page 3: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak
Page 4: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

Crashes suck!

Page 5: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

IT´S DANGEROUS TO GO ALONE! TAKE THIS!

Page 6: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

What what, what, what?

Page 7: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

It ain’t nuthin’ but a code thang

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());

Page 8: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

public class ExceptionHandler implements Thread.UncaughtExceptionHandler {@Overridepublic void uncaughtException(Thread thread, Throwable ex) {// Do things with the thread and the exception hereTroidolytics.defaultHandler.uncaughtException(thread, ex);}

}

Page 9: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

But what happens when internet go boo boo?

Page 10: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

Cache and Carry

Crash reporters cache the exception reports and send them the first time your app is opened with internet access.

Page 11: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

But da app sux!!!!1!!!!1!!!11!

What if your crash disappoints the user and they never start the app again?

Page 12: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

public class ConnectivityBroadcastReceiver extends BroadcastReceiver {@Override

public void onReceive(Context context, Intent intent) {ConnectivityManager cm = (ConnectivityManager)context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo netInfo = cm.getActiveNetworkInfo();if(netInfo != null && netInfo.isConnected()){

// Send the reports here, you should probably start a serviceTroidolytics.sendReports(); // #inspired

}}

}

Page 13: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

<receiver android:name="zg.troido.crashme.ConnectivityBroadcastReceiver"android:enabled="true"android:exported="true"android:label="ConnectivityChange">

<intent-filter><action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>

</intent-filter></receiver>

Page 14: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

It’s not only your app that’s not responding

Page 15: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

compile 'com.github.anrwatchdog:anrwatchdog:1.1.+'

Page 16: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

if (!BuildConfig.DEBUG) {new ANRWatchDog().start();

}

Page 17: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

WHY DO WE NEED THIS?

Page 18: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

SUPERPOWERS

grouping crashesos version

device modelram / cpu

Page 19: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

What what, what, what?

Page 20: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

Log EVERYTHINGcaught exceptions, custom messages,variable states

} catch (Exception e) { Crashlytics.logException(e);

ACRA.getErrorReporter().handleException(e); }

And if you are special and want custom logging?

Page 21: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

Exporting crashes

Page 22: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

WTF is... ACRA?

Page 23: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

init@ReportsCrashes( formUri = "http://www.backendofyourchoice.com/reportpath", formKey = "" // This is required for backward compatibility but not used)public class AcraApplication extends Application {...}

Page 24: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

init public void onCreate() { super.onCreate(); ACRA.init(this); }

Page 25: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

WTF is Crashlytics?

Page 26: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

init

get fabric plugin include crashlytics

Page 27: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

TAKEOUT

know your appPlan-Do-Check-Adjust

stability matters

Page 28: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak

Adriano OrioliHrvoje Kozak

Troido