Revision as of 15:12, 19 September 2013 by mrlacey (Talk | contribs)

Confirming that the user wants to leave the app

From Nokia Developer Wiki
Jump to: navigation, search

This article explains discusses prompting the user before they leave an app.

WP Metro Icon UI.png
SignpostIcon XAML 40.png
WP Metro Icon WP8.png
SignpostIcon WP7 70px.png
Article Metadata
Tested with
SDK: Windows Phone 7.1, Windows Phone 8.0 -->
Created: (20 Sep 2013)
Last edited: mrlacey (19 Sep 2013)



It's easy to ask a user to confirm that they want to leave an app (or page) by overriding the `OnBackKeyPress` method on a page. See:

   protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
       var result = MessageBox.Show("Are you sure you want to exit the app?", "Please confirm", MessageBoxButton.OKCancel);
       e.Cancel = result != MessageBoxResult.OK;

But what if you want to add this confirmation when the user leaves the app in ways other than pressing the back button?


The short answer is that it's not possible to prompt the user when they leave an app in other ways and it certainly isn't possible to stop them leaving. Let's look at why.


Leaving the app in any other way will cause the application level events to be triggered and these cannot block indefinitely (and actually only have a few seconds to run) as to do so would risk compromising the OS. Imagine for instance if you could throw up a message box when someone left an app for any reason (and cancel the navigation dependent upon the result). This would enable the creation of an app that could prevent the user EVER leaving the app. This would be the equivalent of being able to override the other hardware buttons or stop someone launching another app from system UI (E.g. Toasts, notifications or answering incoming calls) There may be a few cases such as Line Of Business apps where this may be desirable but it doesn’t make sense in terms of a general purpose, consumer focused, mobile operating system-like Windows Phone.

Typically apps try and force a confirmation on exit to avoid accidentally closing the app. There are a few motivations behind this.

  1. The company behind the app isn’t familiar with the OS and closing apps via the back button and so they assume the users won’t be either. – Coding for this just reinforces uncertainty in the system and an inconsistent experience across apps.
  2. The navigation model within the app is confusing and users aren’t always clear where they are in the app and so don’t realize they’re exiting by pressing back. – This is an Information Architecture issue and should be solved with better UX design.
  3. Users often close accidentally and have to relaunch the app, which is very slow. Confirming closing is faster than restarting the app and so seen as beneficial. – The better solution here would be to improve startup/launch time. This would also help all users of the app and not just those who close the app accidentally.

The other reason commonly seen for wanting to confirm application exit is if there is entered but unsaved data. In this scenario it is normally better to automatically save it (login credentials being the usual exception) and then restore it, or ask the user if they want it restored when the user returns to the app. The nature of the data, the app and how they return to it can also have an impact on what is most appropriate here.



Remove Category:Draft when the page is complete or near complete

Version Hint

Windows Phone: [[Category:Windows Phone]]
[[Category:Windows Phone 7.5]]
[[Category:Windows Phone 8]]

Nokia Asha: [[Category:Nokia Asha]]
[[Category:Nokia Asha Platform 1.0]]

Series 40: [[Category:Series 40]]
[[Category:Series 40 1st Edition]] [[Category:Series 40 2nd Edition]]
[[Category:Series 40 3rd Edition (initial release)]] [[Category:Series 40 3rd Edition FP1]] [[Category:Series 40 3rd Edition FP2]]
[[Category:Series 40 5th Edition (initial release)]] [[Category:Series 40 5th Edition FP1]]
[[Category:Series 40 6th Edition (initial release)]] [[Category:Series 40 6th Edition FP1]] [[Category:Series 40 Developer Platform 1.0]] [[Category:Series 40 Developer Platform 1.1]] [[Category:Series 40 Developer Platform 2.0]]

Symbian: [[Category:Symbian]]
[[Category:S60 1st Edition]] [[Category:S60 2nd Edition (initial release)]] [[Category:S60 2nd Edition FP1]] [[Category:S60 2nd Edition FP2]] [[Category:S60 2nd Edition FP3]]
[[Category:S60 3rd Edition (initial release)]] [[Category:S60 3rd Edition FP1]] [[Category:S60 3rd Edition FP2]]
[[Category:S60 5th Edition]]
[[Category:Symbian^3]] [[Category:Symbian Anna]] [[Category:Nokia Belle]]

190 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.


Thank you!

We appreciate your feedback.