SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
Inside the Android Application Framework
Introduction
Your host: Dan Morrill, Developer Advocate
Android is a complete OS, not just a framework
Even the friendliest abstraction still has “seams”
Let’s demystify Android’s seams
Managed Component Lifecycles
 An Android APK is a collection of components
 Components share a set of resources
    Databases, preferences, file space, etc.
    Also: a Linux process.

 Every Android component has a managed lifecycle
Basics of an Android Application


 Activities
 Tasks
 Processes
Activities and Tasks
An Activity is a “molecule”: a discrete chunk of functionality
A task is a collection of Activities
A “process” is a standard Linux process
Activities and Tasks

              Activity   Activity   Activity
   Activity


                          ContentProvider
    ContentProvider
                              Process

         Service               Service


       Process               Process
     APK Package           APK Package
Activities and Tasks

   Activity   Activity     Activity   Activity


                    Task    ContentProvider
    ContentProvider
                                Process

        Service                  Service

        Process                Process
     APK Package             APK Package
Activities Are...
...a concrete class in the API
...an encapsulation of a particular operation
...run in the process of the .APK which installed them
...optionally associated with a window (UI)
...an execution Context
Tasks Are...
...more of a notion than a concrete API entity
...a collection of related Activities
...capable of spanning multiple processes
...associated with their own UI history stack
...what users on other platforms know as “applications”
Process Basics
Android process == Linux process
By default, 1 process per APK
By default, 1 thread per process
All* components interleave events into the main thread




 *
Most
Process Lifecycle
A process is started for a given user ID when needed
   Binding to a Service
   Binding to a ContentProvider
   Starting an Activity
   Firing an IntentReceiver

Remains running until killed by the system
More on Activities


 Activity Lifecycle
 Examples of Common Use
 Cases
The Directed Cyclic Graph of Life
 Activities have several states
 Lifecycle methods are called on
 transitions
 You typically don’t need to use
 them all, but they are there
 http://code.google.
 com/android/reference/android/app/
 Activity.html
Activity Lifecycle
Three general “phases”

Starting up

    onCreate(): first method called during lifetime, with prior state

    onStart()/onRestart(): signal that execution is beginning

    onResume(): signals that a previous pause is being undone
Activity Lifecycle
Normal execution

    onFreeze(): save UI state (NOT intended to save persistent data)

    onPause: signals loss of focus and possible impending shutdown
Activity Lifecycle
Shutting down

    onStop()/onDestroy(): final shutdown and process termination

    Not guaranteed to be called (and usually not, except on finish()...)
Activity Lifecycle Examples
Starting a Child Activity
Child Activity + Process Shutdown
Returning to the Home Screen
Calling finish() Explicitly
Displaying a Dialog Box
Semi-Transparent Windows
Device Sleep
Example: Child Activity Launched
 Call sequence:
    onCreate()
    onStart()
    onResume()
    onFreeze()                   This is the “classic”
    onPause()
                                 scenario.
    onStop()
    onRestart()
    onStart(), onResume(), ...
Example: Child Activity + Process
Death
 Call sequence:
    onCreate() (empty state)
    onStart()
    onResume()                     Like the basic case, but
                                   onCreate() is called again,
    onFreeze()
                                   with the state saved in
    onPause()                      onFreeze().
    onStop() (maybe)
    onDestroy() (maybe)
    onCreate() (with state), ...
Example: User Hits ’Home’
Call sequence:
   onCreate()
   onStart()
   onResume()            Identical to the basic case
   onFreeze()            -- that is, the Home key is
   onPause()
                         not a special case.
   onStop() (maybe)
   onDestroy() (maybe)
Example: finish() Called
Call sequence:
   onCreate()
   onStart()     Because the Activity has
   onResume()    been explicitly told to quit
                 and is being removed from
   onPause()
                 the task (and history stack),
   onStop()      onFreeze() is not called,
   onDestroy()   and onDestroy() is
                 reached.
Example: Dialog Box
Call sequence:
   onCreate()
   onStart()
                 Despite appearances,
   onResume()    dialog boxes are Views,
                 and not Activities, so they
                 have no effect on the
                 owning Activity’s lifecycle.
Example: Transparent/Non-fullscreen Child

 Call sequence:
    onCreate()
    onStart()
                         The new partial-screen
                         window leaves a portion of
    onResume()           the previous window visible,
    onFreeze()           so onPause() is followed by
    onPause()
                         onResume() (without
                         onStop()) when the child
    onResume()           closes.
Example: Device Goes to Sleep
 Call sequence:
    onCreate()
    onStart()
    onResume()    The device going to sleep is
                  identical to a non-fullscreen
    onFreeze()
                  Activity being launched on
    onPause()     top.
    onResume()
Threads on Android


 Overview
 Loopers
 Multi-thread Considerations
Threading Overview
Each process has one thread (by default)
Most components share the single thread
Services and ContentProviders sometimes do not
Threads and Loopers
Each thread has a Looper to handle a message queue
Events from all components are interleaved into Looper
   e.g. View UI events, IntentReceivers firing, etc.

Loopers cannot accommodate multi-threaded access
   They are designed to play nicely with MessageHandlers
Threads and Loopers
                    APK Package
                      Process
              Thread               Local
    Intent
              Looper              Service
   Receive
                                    Call
       r
                          UI
   Activity             Events
                                  Thread
                                  External
              Message             Service
   Activity    Queue    System     Calls
                        Events
Threads and Views
Views use Looper messages to fire events
Since Loopers are 1:1 with threads, the View tree is too
Threads you create cannot directly touch a View
But, you can create a new Looper for your own thread
Threads in Other Contexts
Services & ContentProviders sometimes run in their own threads
   ...but still in the same process
Components can create threads, but must handle thread-safety
Service Lifecycle
Started by some other Component
   Either explicitly, or implicitly by binding to it

Explicitly-started Services run until explicitly shut down
   (or killed by the system during a memory crunch)

Implicitly-started Services run til the last client unbinds
More on Processes


 Resource Management
 Processes & Security
 Controlling Processes
Process Resource Management
Spawned by the special “Zygote” process
   Process + pre-warmed Dalvik VM == responsiveness

Process runs under user ID unique to system
   Process + User ID == security
Processes & Security
Each application is given a unique user ID
   No exceptions!
   ...except these: init, Zygote, and the main runtime

Each application has direct access only to its own data
Other apps’ resources are available only via defined,
explicitly-exposed APIs
   i.e. Issuing Intents, binding to Services or ContentProviders
Inter-Process Communication


 Why??
 Process Transparency
 Binder in 30 Seconds
 IPC using Parcelables
 IPC using Bundles
 Android IDL
Why??
All this process/Activity/task stuff is confusing... why?
It’s all for the noble goal of efficiency (i.e. speed.)
Serialization is slooow; memory transfers are slooow.
CPU is not the bottleneck: think memory & bandwidth.
Process Transparency
Process management is transparent to code.
...almost. In some cases, it’s unavoidably visible.
Lifecycle is seamless, but data sometimes isn’t.
Specific APIs send data across process boundaries.
IPC Overview
 Kernel                                                 Process
          Binder
                                 Parcel


                               Parcelable



                      Bundle                Custom
                                            Objects



                    Intent      Activity      Service
                   Receive
                       r
Binder in 30 Seconds
All IPC goes through “The Binder”
   Binder is implemented as a kernel module + system lib
   Supports sophisticated cross-process data transport

The framework APIs “know” how to use Binder
Generally two entry points: Bundles & Parcelables
IPC - Parcelables
A Parcelable is a class which can marshal its state to something
Binder can handle -- namely, a “Parcel”
Standard Java serialization has semantics Parcelables don’t need
   Supporting full serialization would mean wasting CPU cycles
IPC - Bundles
Bundles are typesafe containers of primitives
   That is, C-like primitives: ints, strings, etc.
Simple data-passing APIs use Bundles
   Think of onFreeze() as passing data to your future self
Flat structure permits optimizations like memory-mapping
IPC - AIDL
“Android Interface Definition Language”
Used to build developer-friendly APIs using Parcelables
Preferred way to expose structured, complex-typed APIs
Compromise between efficiency and Java usability
Wrapping Up

 APKs are loose collections of components

 Tasks (AKA apps) are bags of component
 instances that span processes & APKs

 Managed lifecycles & IPC join the “seams”
Questions?

Weitere ähnliche Inhalte

Was ist angesagt?

201913046 wahyu septiansyah network programing
201913046 wahyu septiansyah network programing201913046 wahyu septiansyah network programing
201913046 wahyu septiansyah network programingwahyuseptiansyah
 
Servletand sessiontracking
Servletand sessiontrackingServletand sessiontracking
Servletand sessiontrackingvamsi krishna
 
Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113SOAT
 
ZooKeeper Recipes and Solutions
ZooKeeper Recipes and SolutionsZooKeeper Recipes and Solutions
ZooKeeper Recipes and SolutionsJeff Smith
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterSimen Li
 
Java 5 concurrency
Java 5 concurrencyJava 5 concurrency
Java 5 concurrencypriyank09
 
Rapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINARapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINAtrustinlee
 
Making Java more dynamic: runtime code generation for the JVM
Making Java more dynamic: runtime code generation for the JVMMaking Java more dynamic: runtime code generation for the JVM
Making Java more dynamic: runtime code generation for the JVMRafael Winterhalter
 

Was ist angesagt? (12)

201913046 wahyu septiansyah network programing
201913046 wahyu septiansyah network programing201913046 wahyu septiansyah network programing
201913046 wahyu septiansyah network programing
 
Servletand sessiontracking
Servletand sessiontrackingServletand sessiontracking
Servletand sessiontracking
 
Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113
 
Vaadin 7
Vaadin 7Vaadin 7
Vaadin 7
 
Vaadin 7
Vaadin 7Vaadin 7
Vaadin 7
 
ZooKeeper Recipes and Solutions
ZooKeeper Recipes and SolutionsZooKeeper Recipes and Solutions
ZooKeeper Recipes and Solutions
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
Java 5 concurrency
Java 5 concurrencyJava 5 concurrency
Java 5 concurrency
 
Rapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINARapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINA
 
Making Java more dynamic: runtime code generation for the JVM
Making Java more dynamic: runtime code generation for the JVMMaking Java more dynamic: runtime code generation for the JVM
Making Java more dynamic: runtime code generation for the JVM
 
What's new in Java EE 6
What's new in Java EE 6What's new in Java EE 6
What's new in Java EE 6
 

Ähnlich wie Inside the android_application_framework

Inside the Android application framework - Google I/O 2009
Inside the Android application framework - Google I/O 2009Inside the Android application framework - Google I/O 2009
Inside the Android application framework - Google I/O 2009Viswanath J
 
Android Jumpstart Jfokus
Android Jumpstart JfokusAndroid Jumpstart Jfokus
Android Jumpstart JfokusLars Vogel
 
Node.js: A Guided Tour
Node.js: A Guided TourNode.js: A Guided Tour
Node.js: A Guided Tourcacois
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backendDavid Padbury
 
Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Akshay Nagpurkar
 
Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Akshay Nagpurkar
 
Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11 Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11 Lars Vogel
 
Introduction to nodejs
Introduction to nodejsIntroduction to nodejs
Introduction to nodejsJames Carr
 
11_UNIX_Processes_Including_Select.ppt
11_UNIX_Processes_Including_Select.ppt11_UNIX_Processes_Including_Select.ppt
11_UNIX_Processes_Including_Select.pptSIDDHARTHANANDCSE202
 
Async programming and python
Async programming and pythonAsync programming and python
Async programming and pythonChetan Giridhar
 
Understanding Framework Architecture using Eclipse
Understanding Framework Architecture using EclipseUnderstanding Framework Architecture using Eclipse
Understanding Framework Architecture using Eclipseanshunjain
 
The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.5.4 book - Part 14 of 185The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.5.4 book - Part 14 of 185Mahmoud Samir Fayed
 

Ähnlich wie Inside the android_application_framework (20)

Inside the Android application framework - Google I/O 2009
Inside the Android application framework - Google I/O 2009Inside the Android application framework - Google I/O 2009
Inside the Android application framework - Google I/O 2009
 
Android Jumpstart Jfokus
Android Jumpstart JfokusAndroid Jumpstart Jfokus
Android Jumpstart Jfokus
 
Android os
Android osAndroid os
Android os
 
Node.js: A Guided Tour
Node.js: A Guided TourNode.js: A Guided Tour
Node.js: A Guided Tour
 
Android OS
Android OSAndroid OS
Android OS
 
Linux Programming
Linux ProgrammingLinux Programming
Linux Programming
 
Node
NodeNode
Node
 
concurrency
concurrencyconcurrency
concurrency
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
 
Android
AndroidAndroid
Android
 
Unit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.pptUnit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.ppt
 
Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Ppl for students unit 4 and 5
Ppl for students unit 4 and 5
 
Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Ppl for students unit 4 and 5
Ppl for students unit 4 and 5
 
Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11 Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11
 
jBPM
jBPMjBPM
jBPM
 
Introduction to nodejs
Introduction to nodejsIntroduction to nodejs
Introduction to nodejs
 
11_UNIX_Processes_Including_Select.ppt
11_UNIX_Processes_Including_Select.ppt11_UNIX_Processes_Including_Select.ppt
11_UNIX_Processes_Including_Select.ppt
 
Async programming and python
Async programming and pythonAsync programming and python
Async programming and python
 
Understanding Framework Architecture using Eclipse
Understanding Framework Architecture using EclipseUnderstanding Framework Architecture using Eclipse
Understanding Framework Architecture using Eclipse
 
The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.5.4 book - Part 14 of 185The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.5.4 book - Part 14 of 185
 

Kürzlich hochgeladen

DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxDIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxMichelleTuguinay1
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptxmary850239
 
CHEST Proprioceptive neuromuscular facilitation.pptx
CHEST Proprioceptive neuromuscular facilitation.pptxCHEST Proprioceptive neuromuscular facilitation.pptx
CHEST Proprioceptive neuromuscular facilitation.pptxAneriPatwari
 
ARTERIAL BLOOD GAS ANALYSIS........pptx
ARTERIAL BLOOD  GAS ANALYSIS........pptxARTERIAL BLOOD  GAS ANALYSIS........pptx
ARTERIAL BLOOD GAS ANALYSIS........pptxAneriPatwari
 
Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptx
Unraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptxUnraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptx
Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptxDhatriParmar
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Projectjordimapav
 
Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Celine George
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
Grade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptxGrade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptxkarenfajardo43
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmStan Meyer
 
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Association for Project Management
 
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...DhatriParmar
 
Q-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITWQ-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITWQuiz Club NITW
 
Textual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSTextual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSMae Pangan
 
ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6Vanessa Camilleri
 

Kürzlich hochgeladen (20)

DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxDIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx
 
CHEST Proprioceptive neuromuscular facilitation.pptx
CHEST Proprioceptive neuromuscular facilitation.pptxCHEST Proprioceptive neuromuscular facilitation.pptx
CHEST Proprioceptive neuromuscular facilitation.pptx
 
ARTERIAL BLOOD GAS ANALYSIS........pptx
ARTERIAL BLOOD  GAS ANALYSIS........pptxARTERIAL BLOOD  GAS ANALYSIS........pptx
ARTERIAL BLOOD GAS ANALYSIS........pptx
 
prashanth updated resume 2024 for Teaching Profession
prashanth updated resume 2024 for Teaching Professionprashanth updated resume 2024 for Teaching Profession
prashanth updated resume 2024 for Teaching Profession
 
Paradigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTAParadigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTA
 
Mattingly "AI & Prompt Design: Large Language Models"
Mattingly "AI & Prompt Design: Large Language Models"Mattingly "AI & Prompt Design: Large Language Models"
Mattingly "AI & Prompt Design: Large Language Models"
 
Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptx
Unraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptxUnraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptx
Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptx
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Project
 
Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 
INCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptx
INCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptxINCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptx
INCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptx
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
Grade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptxGrade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptx
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and Film
 
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
 
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
Blowin' in the Wind of Caste_ Bob Dylan's Song as a Catalyst for Social Justi...
 
Q-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITWQ-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITW
 
Textual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSTextual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHS
 
ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6ICS 2208 Lecture Slide Notes for Topic 6
ICS 2208 Lecture Slide Notes for Topic 6
 

Inside the android_application_framework

  • 1. Inside the Android Application Framework
  • 2. Introduction Your host: Dan Morrill, Developer Advocate Android is a complete OS, not just a framework Even the friendliest abstraction still has “seams” Let’s demystify Android’s seams
  • 3. Managed Component Lifecycles An Android APK is a collection of components Components share a set of resources Databases, preferences, file space, etc. Also: a Linux process. Every Android component has a managed lifecycle
  • 4. Basics of an Android Application Activities Tasks Processes
  • 5. Activities and Tasks An Activity is a “molecule”: a discrete chunk of functionality A task is a collection of Activities A “process” is a standard Linux process
  • 6. Activities and Tasks Activity Activity Activity Activity ContentProvider ContentProvider Process Service Service Process Process APK Package APK Package
  • 7. Activities and Tasks Activity Activity Activity Activity Task ContentProvider ContentProvider Process Service Service Process Process APK Package APK Package
  • 8. Activities Are... ...a concrete class in the API ...an encapsulation of a particular operation ...run in the process of the .APK which installed them ...optionally associated with a window (UI) ...an execution Context
  • 9. Tasks Are... ...more of a notion than a concrete API entity ...a collection of related Activities ...capable of spanning multiple processes ...associated with their own UI history stack ...what users on other platforms know as “applications”
  • 10. Process Basics Android process == Linux process By default, 1 process per APK By default, 1 thread per process All* components interleave events into the main thread * Most
  • 11. Process Lifecycle A process is started for a given user ID when needed Binding to a Service Binding to a ContentProvider Starting an Activity Firing an IntentReceiver Remains running until killed by the system
  • 12. More on Activities Activity Lifecycle Examples of Common Use Cases
  • 13. The Directed Cyclic Graph of Life Activities have several states Lifecycle methods are called on transitions You typically don’t need to use them all, but they are there http://code.google. com/android/reference/android/app/ Activity.html
  • 14. Activity Lifecycle Three general “phases” Starting up onCreate(): first method called during lifetime, with prior state onStart()/onRestart(): signal that execution is beginning onResume(): signals that a previous pause is being undone
  • 15. Activity Lifecycle Normal execution onFreeze(): save UI state (NOT intended to save persistent data) onPause: signals loss of focus and possible impending shutdown
  • 16. Activity Lifecycle Shutting down onStop()/onDestroy(): final shutdown and process termination Not guaranteed to be called (and usually not, except on finish()...)
  • 17. Activity Lifecycle Examples Starting a Child Activity Child Activity + Process Shutdown Returning to the Home Screen Calling finish() Explicitly Displaying a Dialog Box Semi-Transparent Windows Device Sleep
  • 18. Example: Child Activity Launched Call sequence: onCreate() onStart() onResume() onFreeze() This is the “classic” onPause() scenario. onStop() onRestart() onStart(), onResume(), ...
  • 19. Example: Child Activity + Process Death Call sequence: onCreate() (empty state) onStart() onResume() Like the basic case, but onCreate() is called again, onFreeze() with the state saved in onPause() onFreeze(). onStop() (maybe) onDestroy() (maybe) onCreate() (with state), ...
  • 20. Example: User Hits ’Home’ Call sequence: onCreate() onStart() onResume() Identical to the basic case onFreeze() -- that is, the Home key is onPause() not a special case. onStop() (maybe) onDestroy() (maybe)
  • 21. Example: finish() Called Call sequence: onCreate() onStart() Because the Activity has onResume() been explicitly told to quit and is being removed from onPause() the task (and history stack), onStop() onFreeze() is not called, onDestroy() and onDestroy() is reached.
  • 22. Example: Dialog Box Call sequence: onCreate() onStart() Despite appearances, onResume() dialog boxes are Views, and not Activities, so they have no effect on the owning Activity’s lifecycle.
  • 23. Example: Transparent/Non-fullscreen Child Call sequence: onCreate() onStart() The new partial-screen window leaves a portion of onResume() the previous window visible, onFreeze() so onPause() is followed by onPause() onResume() (without onStop()) when the child onResume() closes.
  • 24. Example: Device Goes to Sleep Call sequence: onCreate() onStart() onResume() The device going to sleep is identical to a non-fullscreen onFreeze() Activity being launched on onPause() top. onResume()
  • 25. Threads on Android Overview Loopers Multi-thread Considerations
  • 26. Threading Overview Each process has one thread (by default) Most components share the single thread Services and ContentProviders sometimes do not
  • 27. Threads and Loopers Each thread has a Looper to handle a message queue Events from all components are interleaved into Looper e.g. View UI events, IntentReceivers firing, etc. Loopers cannot accommodate multi-threaded access They are designed to play nicely with MessageHandlers
  • 28. Threads and Loopers APK Package Process Thread Local Intent Looper Service Receive Call r UI Activity Events Thread External Message Service Activity Queue System Calls Events
  • 29. Threads and Views Views use Looper messages to fire events Since Loopers are 1:1 with threads, the View tree is too Threads you create cannot directly touch a View But, you can create a new Looper for your own thread
  • 30. Threads in Other Contexts Services & ContentProviders sometimes run in their own threads ...but still in the same process Components can create threads, but must handle thread-safety
  • 31. Service Lifecycle Started by some other Component Either explicitly, or implicitly by binding to it Explicitly-started Services run until explicitly shut down (or killed by the system during a memory crunch) Implicitly-started Services run til the last client unbinds
  • 32. More on Processes Resource Management Processes & Security Controlling Processes
  • 33. Process Resource Management Spawned by the special “Zygote” process Process + pre-warmed Dalvik VM == responsiveness Process runs under user ID unique to system Process + User ID == security
  • 34. Processes & Security Each application is given a unique user ID No exceptions! ...except these: init, Zygote, and the main runtime Each application has direct access only to its own data Other apps’ resources are available only via defined, explicitly-exposed APIs i.e. Issuing Intents, binding to Services or ContentProviders
  • 35. Inter-Process Communication Why?? Process Transparency Binder in 30 Seconds IPC using Parcelables IPC using Bundles Android IDL
  • 36. Why?? All this process/Activity/task stuff is confusing... why? It’s all for the noble goal of efficiency (i.e. speed.) Serialization is slooow; memory transfers are slooow. CPU is not the bottleneck: think memory & bandwidth.
  • 37. Process Transparency Process management is transparent to code. ...almost. In some cases, it’s unavoidably visible. Lifecycle is seamless, but data sometimes isn’t. Specific APIs send data across process boundaries.
  • 38. IPC Overview Kernel Process Binder Parcel Parcelable Bundle Custom Objects Intent Activity Service Receive r
  • 39. Binder in 30 Seconds All IPC goes through “The Binder” Binder is implemented as a kernel module + system lib Supports sophisticated cross-process data transport The framework APIs “know” how to use Binder Generally two entry points: Bundles & Parcelables
  • 40. IPC - Parcelables A Parcelable is a class which can marshal its state to something Binder can handle -- namely, a “Parcel” Standard Java serialization has semantics Parcelables don’t need Supporting full serialization would mean wasting CPU cycles
  • 41. IPC - Bundles Bundles are typesafe containers of primitives That is, C-like primitives: ints, strings, etc. Simple data-passing APIs use Bundles Think of onFreeze() as passing data to your future self Flat structure permits optimizations like memory-mapping
  • 42. IPC - AIDL “Android Interface Definition Language” Used to build developer-friendly APIs using Parcelables Preferred way to expose structured, complex-typed APIs Compromise between efficiency and Java usability
  • 43. Wrapping Up APKs are loose collections of components Tasks (AKA apps) are bags of component instances that span processes & APKs Managed lifecycles & IPC join the “seams”