Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of...
Transcript of Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of...
![Page 1: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/1.jpg)
Overview of Activities
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt Institute for Software Integrated Systems
Vanderbilt University Nashville, Tennessee, USA
CS 282 Principles of Operating Systems II Systems Programming for Android
![Page 2: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/2.jpg)
Overview of Activities D. C. Schmidt
2
• Understand how an Activity provides a visual interface for user interaction
Learning Objectives of this Module
We’ll emphasize commonalities & variabilities in our discussion
![Page 3: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/3.jpg)
Overview of Activities D. C. Schmidt
3
Overview of an Activity • An Activity provides a visual interface for user
interaction
![Page 4: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/4.jpg)
Overview of Activities D. C. Schmidt
4
Overview of an Activity • An Activity provides a visual interface for user
interaction • Typically supports one thing a user can do, e.g.:
• Show a login screen • Read an email message • Compose a text message • View a contact • Browse the Internet • etc.
![Page 5: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/5.jpg)
Overview of Activities D. C. Schmidt
5
Overview of an Activity • An Activity provides a visual interface for user
interaction • Typically supports one thing a user can do, e.g.:
• Show a login screen • Read an email message • Compose a text message • View a contact • Browse the Internet • etc.
• Applications can include one or more activities
See developer.android.com/training/basics/activity-lifecycle/index.html for more
![Page 6: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/6.jpg)
Overview of Activities D. C. Schmidt
6
• A Task is a chain of related Activities Tasks
Activity 1
Activity 2
Activity 3
Activity 4
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
Activity 3
![Page 7: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/7.jpg)
Overview of Activities D. C. Schmidt
7
App B
App C
• A Task is a chain of related Activities • Task are not necessarily provided by a single app
App A
Tasks
Activity 1
Activity 2
Activity 3
Activity 4
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
Activity 3
![Page 8: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/8.jpg)
Overview of Activities D. C. Schmidt
8
Tasks
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
• A Task is a chain of related Activities • Task are not necessarily provided by a single app
• Tasks give the illusion that multiple (often unrelated) Activities were developed as part of the same app
![Page 9: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/9.jpg)
Overview of Activities D. C. Schmidt
9
Tasks • The task’s Activity objects are stored on a “back stack” with the currently
running Activity at the top
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
![Page 10: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/10.jpg)
Overview of Activities D. C. Schmidt
10
• The task’s Activity objects are stored on a “back stack” with the currently running Activity at the top
• At runtime • Launching an Activity
places it on top of the stack
Tasks
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
![Page 11: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/11.jpg)
Overview of Activities D. C. Schmidt
11
• The task’s Activity objects are stored on a “back stack” with the currently running Activity at the top
• At runtime • Launching an Activity
places it on top of the stack
• Finishing an Activity pops it off the stack…
Tasks
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
![Page 12: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/12.jpg)
Overview of Activities D. C. Schmidt
12
Tasks • The task’s Activity objects are stored on a “back stack” with the currently
running Activity at the top • At runtime
• Launching an Activity places it on top of the stack
• Finishing an Activity pops it off the stack…
• … & returns to the previous Activity
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
![Page 13: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/13.jpg)
Overview of Activities D. C. Schmidt
13
Tasks • The task’s Activity objects are stored on a “back stack” with the currently
running Activity at the top • At runtime
• Launching an Activity places it on top of the stack
• Hitting the BACK button pops current activity off the stack…
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
![Page 14: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/14.jpg)
Overview of Activities D. C. Schmidt
14
Tasks • The task’s Activity objects are stored on a “back stack” with the currently
running Activity at the top • At runtime
• Launching an Activity places it on top of the stack
• Hitting the BACK button pops current activity off the stack…
• … & returns to the previous Activity
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
![Page 15: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/15.jpg)
Overview of Activities D. C. Schmidt
15
Task Stack
developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
![Page 16: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/16.jpg)
Douglas C. Schmidt
16
Overview of Activities
• Implementing an Activity involves several steps, e.g.: • Inherit from Activity class
public class MapLocation extends Activity { ... }
Implementing an Activity
![Page 17: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/17.jpg)
Douglas C. Schmidt
17
Overview of Activities
• Implementing an Activity involves several steps, e.g.: • Inherit from Activity class • Override selected lifecycle hook
methods
public class MapLocation extends Activity { protected void onCreate (Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); ... }
Implementing an Activity
![Page 18: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/18.jpg)
Douglas C. Schmidt
18
Overview of Activities
• Implementing an Activity involves several steps, e.g.: • Inherit from Activity class • Override selected lifecycle hook
methods • Include Activity in the config file
AndroidManifest.xml • etc.
public class MapLocation extends Activity { protected void onCreate (Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); ... }
Implementing an Activity
<activity android:name="course.examples.Activity.SimpleMapExample.MapLocation" android:label="Map A Location"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" /> </intent-filter> </activity>
![Page 19: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/19.jpg)
Douglas C. Schmidt
19
Overview of Activities
• Implementing an Activity involves several steps
• Android communicates state changes to an Activity by calling its lifecycle hook methods
Implementing an Activity
![Page 20: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/20.jpg)
Douglas C. Schmidt
20
Overview of Activities
• Commonality: Provides common interface for interacting with user, including operations performed when moving between lifecycle states
• Variability: Subclasses can override lifecycle hook methods to do necessary work when an Activity changes state
• Implementing an Activity involves several steps
• Android communicates state changes to an Activity by calling its lifecycle hook methods
Implementing an Activity
![Page 21: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/21.jpg)
Douglas C. Schmidt
21
Overview of Activities
Activity Lifecycle States • Activity starting –
Initialization steps startActivity()
onCreate(), onStart(),
onResume()
Starting
![Page 22: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/22.jpg)
Douglas C. Schmidt
22
Overview of Activities
Activity Lifecycle States • Activity starting –
Initialization steps • Activity running
• Running – visible, has focus • Paused – visible, does not
have focus, can be terminated
• Stopped – not visible, does not have focus, can be terminated
startActivity()
onCreate(), onStart(),
onResume()
Starting
Running onRestart(), onStart(),
onResume()
onPause()
onPause() Paused
Stopped onStop()
![Page 23: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/23.jpg)
Douglas C. Schmidt
23
Overview of Activities
Activity Lifecycle States • Activity starting –
Initialization steps • Activity running
• Running – visible, has focus • Paused – visible, does not
have focus, can be terminated
• Stopped – not visible, does not have focus, can be terminated
• Activity shut down – Voluntarily finished or involuntarily killed by the system
See developer.android.com/guide/components/activities.html for more info
startActivity()
onCreate(), onStart(),
onResume()
Starting
Running
<process killed>
onRestart(), onStart(),
onResume()
onPause()
onPause()
Destroyed
Paused
onDestroy(), <process killed>
Stopped onStop()
![Page 24: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/24.jpg)
Overview of Activities D. C. Schmidt
24
Managing the Activity Lifecycle • Android communicates state changes to application by calling specific
lifecycle methods
![Page 25: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/25.jpg)
Overview of Activities D. C. Schmidt
25
Managing the Activity Lifecycle • Android communicates state changes to application by calling specific
lifecycle methods • The ActivityManager is the system service in Android that communicates
these changes
developer.android.com/reference/android/app/ActivityManager.html has more
![Page 26: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/26.jpg)
Douglas C. Schmidt
26
Overview of Activities
Activity Lifecycle Hook Methods • The Android runtime calls hook methods
on an Activity to control its lifecycle:
• onCreate() – called to initialize an Activity when it is first created
![Page 27: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/27.jpg)
Douglas C. Schmidt
27
Overview of Activities
Activity Lifecycle Hook Methods • The Android runtime calls hook methods
on an Activity to control its lifecycle:
• onCreate() – called to initialize an Activity when it is first created
• onStart() – called when Activity is becoming visible to the user
![Page 28: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/28.jpg)
Douglas C. Schmidt
28
Overview of Activities
Activity Lifecycle Hook Methods • The Android runtime calls hook methods
on an Activity to control its lifecycle:
• onCreate() – called to initialize an Activity when it is first created
• onStart() – called when Activity is becoming visible to the user
• onResume() – called when user returns to an Activity from another
![Page 29: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/29.jpg)
Douglas C. Schmidt
29
Overview of Activities
Activity Lifecycle Hook Methods • The Android runtime calls hook methods
on an Activity to control its lifecycle:
• onCreate() – called to initialize an Activity when it is first created
• onStart() – called when Activity is becoming visible to the user
• onResume() – called when user returns to an Activity from another
• onPause() – called when user leaves an Activity that’s still visible in background
![Page 30: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/30.jpg)
Douglas C. Schmidt
30
Overview of Activities
Activity Lifecycle Hook Methods • The Android runtime calls hook methods
on an Activity to control its lifecycle:
• onCreate() – called to initialize an Activity when it is first created
• onStart() – called when Activity is becoming visible to the user
• onResume() – called when user returns to an Activity from another
• onPause() – called when user leaves an Activity that’s still visible in background
• onStop() – called when user leaves an Activity for another
![Page 31: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/31.jpg)
Douglas C. Schmidt
31
Overview of Activities
Activity Lifecycle Hook Methods
See developer.android.com/reference/android/app/Activity.html for more info
• The Android runtime calls hook methods on an Activity to control its lifecycle:
• onCreate() – called to initialize an Activity when it is first created
• onStart() – called when Activity is becoming visible to the user
• onResume() – called when user returns to an Activity from another
• onPause() – called when user leaves an Activity that’s still visible in background
• onStop() – called when user leaves an Activity for another
• onDestroy() – called when Activity is being released & needs to clean up its allocated resources
![Page 32: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/32.jpg)
Douglas C. Schmidt
32
Overview of Activities
Useful Helper Class for Activity Lifecycle Methods public abstract class LifecycleLoggingActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(getClass().getSimpleName(), "onCreate()"); if (savedInstanceState == null) Log.d(getClass().getSimpleName(), "activity created anew"); else Log.d(getClass().getSimpleName(), "activity restarted"); } public void onStart() { super.onStart(); Log.d(getClass().getSimpleName(), "onStart()"); } ...
Inherit from Activity class
Automatically log lifecycle hook method calls
Note “inversion of control” & patterns in the Android Activity framework
![Page 33: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/33.jpg)
Douglas C. Schmidt
33
Overview of Activities
Template Method GoF Class Behavioral Intent • Provide a skeleton of an
algorithm in a method, deferring some steps to subclasses
Activity
… performStart() onStart()
final void performStart(){ ... // Dispatches the onStart() hook method mInstrumentation.callActivityOnStart(this); ... }
MyLocationActivity
… onStart()
en.wikipedia.org/wiki/Template_method_pattern has more info
![Page 34: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/34.jpg)
Douglas C. Schmidt
34
Overview of Activities
Template Method GoF Class Behavioral Applicability • Implement invariant
aspects of an algorithm once & let subclasses define variant parts
Activity
… performStart() onStart()
MyLocationActivity
… onStart()
![Page 35: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/35.jpg)
Douglas C. Schmidt
35
Overview of Activities
Template Method GoF Class Behavioral Applicability • Implement invariant
aspects of an algorithm once & let subclasses define variant parts
• Localize common behavior in a class to increase code reuse
Activity
… performStart() onStart()
final void performStart(){ ... // Dispatches the onStart() hook method mInstrumentation.callActivityOnStart(this); ... }
MyLocationActivity
… onStart()
![Page 36: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/36.jpg)
Douglas C. Schmidt
36
Overview of Activities
Template Method GoF Class Behavioral Applicability • Implement invariant
aspects of an algorithm once & let subclasses define variant parts
• Localize common behavior in a class to increase code reuse
• Control subclass extensions
Activity
… performStart() onStart()
MyLocationActivity
… onStart()
SomeOtherActivity
… onStart()
![Page 37: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/37.jpg)
Douglas C. Schmidt
37
Overview of Activities
Template Method GoF Class Behavioral Structure & Participants
Activity
MapLocationActivity
![Page 38: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/38.jpg)
Douglas C. Schmidt
38
Overview of Activities
Template Method GoF Class Behavioral Template Method example in Android
• Allow subclasses to customize certain steps in the input handling algorithm public class Activity extends ContextThemeWrapper { ... final void performStart() { ... mInstrumentation.callActivityOnStart(this); ... public class Instrumentation { public void callActivityOnStart(Activity activity) { activity.onStart(); }
Template method
Dispatch the Activity subclasses’ onStart() hook method
Call a helper method that dispatches the hook method
See frameworks/base/core/java/android/app for this code
![Page 39: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/39.jpg)
Douglas C. Schmidt
39
Overview of Activities
Activity
… performStart() onStart()
Consequences + Enables inversion of control
(“Hollywood principle: don't call us – we'll call you!”)
Template Method GoF Class Behavioral
See www.dre.vanderbilt.edu/~schmidt/Coursera/articles/hollywood-principle.txt
ActivityThread performLaunchActivity() …
final void performStart(){ ... // Dispatches the onStart() hook method mInstrumentation.callActivityOnStart(this); ... }
MyLocationActivity
… onStart()
![Page 40: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/40.jpg)
Douglas C. Schmidt
40
Overview of Activities
Consequences + Enables inversion of control
(“Hollywood principle: don't call us – we'll call you!”)
+ Promotes code reuse by collapsing stove-pipes
Template Method GoF Class Behavioral
Common (reusable) code
Activity
… performStart() onStart() performStop() onStop()
MyLocationActivity
… onStart()
SomeOtherActivity
… onStop()
![Page 41: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/41.jpg)
Douglas C. Schmidt
41
Overview of Activities
Consequences + Enables inversion of control
(“Hollywood principle: don't call us – we'll call you!”)
+ Promotes code reuse by collapsing stove-pipes
Template Method GoF Class Behavioral
Variant (non- reusable) code
Activity
… performStart() onStart() performStop() onStop()
MyLocationActivity
… onStart()
SomeOtherActivity
… onStop()
![Page 42: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/42.jpg)
Douglas C. Schmidt
42
Overview of Activities
Consequences + Enables inversion of control
(“Hollywood principle: don't call us – we'll call you!”)
+ Promotes code reuse by collapsing stove-pipes
+ Programmers enforce overriding rules via subclassing
Template Method GoF Class Behavioral
Activity
… performStart() onStart() performStop() onStop()
MyLocationActivity
… onStart()
SomeOtherActivity
… onStop()
![Page 43: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/43.jpg)
Douglas C. Schmidt
43
Overview of Activities
Consequences – Must subclass to specialize
behavior, which can lead to an explosion of subclasses • Compare & contrast with
the Strategy pattern
Template Method GoF Class Behavioral
Activity
… performStart() onStart() performStop() onStop()
MyLocationActivity
… onStart()
SomeOtherActivity
… onStop()
![Page 44: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/44.jpg)
Douglas C. Schmidt
44
Overview of Activities
Consequences – Must subclass to specialize
behavior, which can lead to an explosion of subclasses • Compare & contrast with
the Strategy pattern
– Validation becomes tricky since the proper functioning of the framework depends on the proper functioning of the hook methods!
Template Method GoF Class Behavioral
![Page 45: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/45.jpg)
Douglas C. Schmidt
45
Overview of Activities
Implementation • Virtual vs. non-virtual (final)
template method • Depends on whether the
algorithm embodied by the template method itself may need to change
• Few vs. many primitive operations (hook methods)
• Naming conventions • For example, do*()
vs. make*() vs. on*() prefixes
Template Method GoF Class Behavioral Activity
… performStart() onStart()
final void performStart(){ ... // Dispatches the onStart() hook method mInstrumentation.callActivityOnStart(this); ... }
MyLocationActivity
… onStart()
![Page 46: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/46.jpg)
Douglas C. Schmidt
46
Overview of Activities
Template Method GoF Class Behavioral Known Uses • InterViews Kits • ET++ WindowSystem • AWT Toolkit • ACE & The ACE ORB (TAO) • Android Activity &
AsyncTask frameworks
Params – Types used in background work Progress – Types used when indicating progress Result – Types of result
Hook methods
Template method
developer.android.com/reference/android/os/AsyncTask.html has more info
![Page 47: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/47.jpg)
Overview of Activities D. C. Schmidt
47
MapLocation App Example
![Page 48: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/48.jpg)
Overview of Activities D. C. Schmidt
48
Calling onCreate() in Map App • The onCreate() method is called when
an Activity is first being initialized during app launch
• onCreate() typically initializes global Activity state, e.g., 1. Calls super.onCreate() 2. Inflates & configures UI views as
necessary 3. Sets the Activity’s content view
![Page 49: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/49.jpg)
Overview of Activities D. C. Schmidt
49
MapLocation.onCreate() public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText addressfield = (EditText) findViewById(R.id.location);
final Button button = (Button) findViewById(R.id.mapButton);
button.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
try {
String address = addressfield.getText().toString();
address = address.replace(' ', '+');
Intent geoIntent = new Intent(android.content. Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + address));
startActivity(geoIntent);
} catch (Exception e) { /* ...do something else... */ }
}
}); ...
Sets the Activity’s content view
Calls super.onCreate()
Configure UI views
![Page 50: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/50.jpg)
Overview of Activities D. C. Schmidt
50
Calling onStart() in Map App • The onStart() method is called when
the main Activity for your app is about to become visible on the display
• Typical actions • Reset app state & behavior
![Page 51: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/51.jpg)
Overview of Activities D. C. Schmidt
51
Calling onResume() in Map App
• The onResume() method is called when the main Activity for your app is about to start interacting with the user
• Typical actions • Start foreground-only behaviors
![Page 52: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/52.jpg)
Overview of Activities D. C. Schmidt
52
Entering Text & Launch Map Activity • Clicking on the “Show Map” button
will open a new Activity to display the map
• Note that entering text via the virtual keyboard doesn’t change the focus on the UI nor does it generate any lifecycle events
![Page 53: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/53.jpg)
Overview of Activities D. C. Schmidt
53
Calling onPause() in Map App • The onPause() method is called when
the focus is about to switch to another Activity
• Typical actions • Shutdown foreground-only behaviors
stackoverflow.com/questions/7240916/android-under-what-circumstances-would-a-dialog-appearing-cause-onpause-to-be/7384782#7384782
![Page 54: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/54.jpg)
Overview of Activities D. C. Schmidt
54
Calling onStop() in Map App • The onStop() method is called when
the Activity is no longer visible to the user (but may be restarted again later)
• Typical actions • Cache state
![Page 55: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/55.jpg)
Overview of Activities D. C. Schmidt
55
Calling onPause()/onStop() in Map App
• When the google map Activity is launched, its onCreate() & onStart() methods are called automatically by the Android ActivityManager framework
• The prior Activity’s onPause() & onStop() methods were previously called
![Page 56: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/56.jpg)
Overview of Activities D. C. Schmidt
56
Calling onRestart() in Map App • The onRestart() method is called if the
Activity has been stopped & is about to be started again • e.g., returning back to a previously
launched Activity • Typical actions
• Read cached state
developer.android.com/training/basics/activity-lifecycle/stopping.html has more
![Page 57: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/57.jpg)
Overview of Activities D. C. Schmidt
57
Calling onDestroy() in the Map App • The onDestroy() method is called when
the Activity is about to be destroyed • e.g., when the user presses the “back”
button • Typical actions
• Save persistent state in anticipation of the Activity being recreated later on
![Page 58: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/58.jpg)
Overview of Activities D. C. Schmidt
58
Starting Activities • Create an Intent specifying the Activity to start (Intents are discussed later)
Android App
Primary Activity
Secondary Activity
Intent
developer.android.com/reference/android/content/Intent.html has more info
![Page 59: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/59.jpg)
Overview of Activities D. C. Schmidt
59
Starting Activities • Create an Intent specifying the Activity to start (Intents are discussed later) • Pass newly created Intent to one of the following methods
• startActivity() – Launch a new Activity with no return expected • startActivityForResult() – Callback to return result when Activity finishes
![Page 60: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/60.jpg)
Overview of Activities D. C. Schmidt
60
Starting Activities • Create an Intent specifying the Activity to start (Intents are discussed later) • Pass newly created Intent to one of the following methods
• startActivity() – Launch a new Activity with no return expected • StartActivityForResult() – Callback to return result when Activity finishes
• We use startActivity() in our example app
protected void onCreate(Bundle savedInstanceState) { public void onClick(View v) { … Intent geoIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + address));
startActivity(geoIntent); …
![Page 61: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/61.jpg)
Overview of Activities D. C. Schmidt
61
Starting Activities • Create an Intent specifying the Activity to start (Intents are discussed later) • Pass newly created Intent to one of the following methods
• startActivity() – Launch a new Activity with no return expected • StartActivityForResult() – Callback to return result when Activity finishes
• We use startActivity() in our example app
• We’ll show startActivityForResult() shortly
protected void onCreate(Bundle savedInstanceState) { public void onClick(View v) { … Intent geoIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + address));
startActivity(geoIntent); …
![Page 62: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/62.jpg)
Overview of Activities D. C. Schmidt
62
MapLocationFromContacts
*Not really my address
![Page 63: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/63.jpg)
Overview of Activities D. C. Schmidt
63
Using startActivityForResult() private static final int PICK_CONTACT_REQUEST = 0; ... public class MapLocation extends Activity { protected void onCreate(Bundle savedInstanceState) { ... button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { try { Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
} catch (Exception e) {} }}); ...
![Page 64: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/64.jpg)
Overview of Activities D. C. Schmidt
64
• Started Activity sets result by calling Activity.setResult()
• public final void setResult (int resultCode)
• public final void setResult (int resultCode, Intent data)
• resultCode (an int)
• RESULT_CANCELED
• RESULT_OK
• RESULT_FIRST_USER
• Custom resultCodes can be added after this
Using startActivityForResult()
![Page 65: Overview of Activities - Vanderbilt Universityschmidt/cs282/PDFs/3-Activities.pdf · Overview of Activities D. C. Schmidt . 5 . Overview of an Activity • An Activity provides a](https://reader035.fdocuments.in/reader035/viewer/2022071102/5fdb62da0822fd7cb644917e/html5/thumbnails/65.jpg)
Overview of Activities D. C. Schmidt
65
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
… String address = /* extract address from data */ Intent geoIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + address));
startActivity(geoIntent); } }
Using startActivityForResult()