Ronan Schwarz, OpenIntents
In this talk, we will once again walk through the Android Application fundamentals
- but this time from the Framework's point of View.
- You will learn why there is, in fact, no app - only a bunch of Activities.
- What a HistoryRecord is, what it is used for and it's implications for the lifecycle.
- Why ContentProviders are a type of service.
- How the Framework enforces Permissions across the system and what to make of it.
- Why Intents are even way better for RPC calls then is seen at first sight.
We will cover a lot of little tricks and some bigger parts of the Android framework and
it's implementation, giving you new insights for everyday development
2. OpenIntents OpenIntents
www.OpenIntents.org
● Founded in 2009
● Open Source based Company
● Two times winners of Google Android Developer Challenge
● Over 15 Apps in the Market (Free + Paid )
● Services:
● Reusable components
● Intents Registry
● Developer Support
● Consulting
● App Development
●
Mentoring organization in Summer of Code 2011
3.
4. OpenIntents
www.OpenIntents.org Topics
● Activity Lifecycle
● Activity Manager
● Concepts
● Components
● Why there is no App
● Permissions
● Gingerbread
9. OpenIntents
www.OpenIntents.org ActivityManagerService
● Project: frameworks/base.git
● Package: com.android.server.am
● Pure Java
● Started by SystemServer, running as system process
● Creates the System Context
● Keeps a reference of the Home Screen / Launcher App
14. OpenIntents
www.OpenIntents.org Starting an Activity
● startActivity is called (calls startActivity(Intent, -1)
● ActivityManagerNative.startActivity(..)
● Call gets dispatched via AIDL Binder to ActivityManagerService
● Call is queued in a Handler Message Queue
● startActivityXX is called
● startActivityLocked is called
15. OpenIntents
www.OpenIntents.org Starting an Activity
● Class is resolved
● Permission check
● Inform Watchers
● Create HistoryRecord
● Check launch Flags
● Create Task or add to existing
● Grant Permissions
16. OpenIntents
www.OpenIntents.org Starting an Activity
● Add to History Stack
● Prepare Animations
● Add to WindowManager (creates window)
● Pause currently running Activities
● Switch Visibility
● Calculate & update Configuration (may trigger reset)
● Resume (make call across Binder into Activity Thread)
● Set Focus
● Ensure visibility
24. OpenIntents
www.OpenIntents.org Changes in Gingerbread
● HistoryRecord renamed to ActivityRecord
● Introduction of Heavyweight Process
● Only one at any given time
● Parts of lifecycle management moved to ActivityStack
● Hardware Event / Key input was re-written
● WindowManager now has an extra “secure” layer
● ...
● Beautified comments :)