15
App Lifecycle + Advanced Architectures/Patterns/Problems Android

Advanced android app lifecycle + Patterns

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Advanced android app lifecycle + Patterns

App Lifecycle + Advanced Architectures/Patterns/Problems

Android

Page 2: Advanced android app lifecycle + Patterns

bryan costanichem: [email protected]: @bryancostanichslides: slideshare.net/bryancostanichcode: bit.ly/1avqivC

Page 3: Advanced android app lifecycle + Patterns

What We'll Cover

• Review Activity Lifecycle

• Relation to the App Lifecycle

• Review States + Important Events

• Background Updates

• Configuration Changes

• App Lifecycle + Patterns for Handling

• App Initialization

• Application Crashes and Restarts

• Asynchronous Initialization

Page 4: Advanced android app lifecycle + Patterns

Activity LifecycleImportant Methods

OnCreate ( ) - Initialize StufOnResume ( ) - Begin LifeOnPause ( ) - Stop/Pause

Page 5: Advanced android app lifecycle + Patterns

Code Walkthrough 1Activity Lifecycle

Page 6: Advanced android app lifecycle + Patterns

App Initialization Common to need to initialize things at the beginning of the App Lifecycle

 Sometimes these can take a while

 Common approach is to show a loading screen

Page 7: Advanced android app lifecycle + Patterns

Pattern: App SingletonApp Singleton Class

bool IsInitialized PropertyInitialized Event

ActivityBaseCheck to see if

App.Current.IsInitialized

App

public static App() protected - ctor ()public static App Currentpublic bool IsInitialized

public event Initialized

Page 8: Advanced android app lifecycle + Patterns

Code Walkthrough 2App Initialization

Page 9: Advanced android app lifecycle + Patterns

App Initialization After Crash• Unhandled Exceptions will cause Android to kill the process

• AppDomain and all objects in it will be cleaned up by Mono

• Android will still attempt to launch last running activity

• If it relies on initialization, activity won’t make sense

• If activity re-launch fails, it moves backwards through the navigation history - Painful

• Need to enable initialization on all activities

• Sometimes want to force load of launch activity

Page 10: Advanced android app lifecycle + Patterns

Code Walkthrough 3App Initialization, Post-Crash

Page 11: Advanced android app lifecycle + Patterns

Unhandled Exceptions

• In other app platforms, can be handled at an App level

• AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;

• Trickier in Android - Will cause a “Spectacular Crash”

• Some day, this story will be better, can at least log now

• See in Android Log

Page 12: Advanced android app lifecycle + Patterns

Code Walkthrough 4

protected void HandleUnhandledException (object sender, UnhandledExceptionEventArgs args){ Exception e = (Exception) args.ExceptionObject; Console.WriteLine ("Unhandled Exception = " + e.Message);}

Page 13: Advanced android app lifecycle + Patterns

Waiting for Async Initializations• Sometimes app needs to wait for multiple

asynchronous inits

• e.g.: binding to more than one service

• or service + web request

• etc.

• Same pattern as before, but keep track of inits

• When all inits complete, raise Initialized event

Page 14: Advanced android app lifecycle + Patterns

Code Walkthrough 5Asynchronous Initialization

Page 15: Advanced android app lifecycle + Patterns

Q+A