extreme exception expectation; adriano orioli, hrvoje kozak
TRANSCRIPT
![Page 1: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/1.jpg)
eXtreme eXception eXpectation
![Page 2: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/2.jpg)
![Page 3: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/3.jpg)
![Page 4: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/4.jpg)
Crashes suck!
![Page 5: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/5.jpg)
IT´S DANGEROUS TO GO ALONE! TAKE THIS!
![Page 6: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/6.jpg)
What what, what, what?
![Page 7: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/7.jpg)
It ain’t nuthin’ but a code thang
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
![Page 8: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/8.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/9.jpg)
But what happens when internet go boo boo?
![Page 10: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/10.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/11.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/12.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/13.jpg)
<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](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/14.jpg)
It’s not only your app that’s not responding
![Page 15: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/15.jpg)
compile 'com.github.anrwatchdog:anrwatchdog:1.1.+'
![Page 16: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/16.jpg)
if (!BuildConfig.DEBUG) {new ANRWatchDog().start();
}
![Page 17: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/17.jpg)
WHY DO WE NEED THIS?
![Page 18: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/18.jpg)
SUPERPOWERS
grouping crashesos version
device modelram / cpu
![Page 19: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/19.jpg)
What what, what, what?
![Page 20: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/20.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/21.jpg)
Exporting crashes
![Page 22: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/22.jpg)
WTF is... ACRA?
![Page 23: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/23.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/24.jpg)
init public void onCreate() { super.onCreate(); ACRA.init(this); }
![Page 25: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/25.jpg)
WTF is Crashlytics?
![Page 26: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/26.jpg)
init
get fabric plugin include crashlytics
![Page 27: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/27.jpg)
TAKEOUT
know your appPlan-Do-Check-Adjust
stability matters
![Page 28: eXtreme eXception eXpectation; Adriano Orioli, Hrvoje Kozak](https://reader033.vdocument.in/reader033/viewer/2022052313/58a632e91a28ab68118b4839/html5/thumbnails/28.jpg)
Adriano OrioliHrvoje Kozak
Troido