Everything is pre-emptively multithreaded. Everything.
You can and will be interrupted in the middle of everyone of your damn functions, usually by the user tilting the screen or tapping somewhere, or from an incoming phone call. Plan for this, test for this, expect to get any message in any state. Handle programmatic interruption gracefully.
Write re-entrant, well-defended code. Don't assume you know what the state of the screen is at any minute. Stay away from interaction designs that include tasks that can't be interrupted.