Top Banner
Android activity launch modes and tasks Gonçalo Silva / Novoda
75

Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Apr 12, 2017

Download

Technology

JAX London
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Android activity launch modes and tasks

Gonçalo Silva / Novoda

Page 2: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 3: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Co-organizer~1250 members

Page 4: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Activity launch modes and tasks..

Page 5: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

What is an Activity?

Page 6: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Main building block of Android applications

Page 7: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

HelloWorldActivity.java

public class HelloWorldActivity extends Activity {

....

}

Page 8: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.novoda.jax" android:versionCode="1" android:versionName="1.0" >

<application >

<activity android:name=".HelloWorldActivity" />

</application>

</manifest>

Page 9: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Activity task

Sequence of related activities a user follows

Page 10: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 11: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 12: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 13: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 14: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Activity stack / back stack

Page 15: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

How are activites started?

Page 16: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Messaging facility for late run-time binding between components

Intents!

Page 17: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Intent object

• Action• Data – URI and/or MIME type• Category• Extras – key/value pairs• Component name• Flags

Page 18: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Explicit intent resolution

Intent intent = new Intent(this, HelloWorldActivity.class);

startActivity(intent);

Page 19: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Implicit intent resolution

Uri google = Uri.parse("http://www.google.com");

Intent intent = new Intent( Intent.ACTION_VIEW, google);

startActivity(intent);

Page 20: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Intent filter

<activity android:name=".SimpleBrowser" >

<intent-filter >

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<data android:scheme="http" />

</intent-filter>

</activity>

Page 21: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Intents are great!

Loosely coupled activities

Specify your behaviour as intentions

Page 22: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Activity re-use

Starting an activity in a different application

Page 23: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Task

Twitter

Page 24: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Task

Twitter

Page 25: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Task

Twitter

Gmail

Page 26: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Activity re-use

Some activities are started in a different task

Page 27: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Task A

Gmail

Page 28: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Task A

Gmail

Task B

Browser

Page 29: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Activity re-use

Allows user to resume after leaving original task

Why different tasks?

Page 30: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

How can we resume an activity?

Page 31: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 32: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Resuming an activity

Page 33: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Resuming a “killed” activity

Page 34: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

How can we choose a specific task behaviour for our activities?

Page 35: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Activity launch modes

Define how a new instance of an activity is associated with the current task

Page 36: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Four launch modes standard

singleTop

singleTask

singleInstance

Page 37: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Defined in the manifest

<activity android:launchMode="singleTop" android:name=".HelloWorldActivity" />

Page 38: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Set as a flag in an intent

Intent intent = new Intent(this, HelloWorldActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

startActivity(intent);

Page 39: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Demo App!!!Search the market for: launchmode

Page 40: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

standard – default launch mode

Page 41: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

singleTop

A new activity X will not be started if there is an activity X on top of the stack

onNewIntent() will be called instead of the normal activity lifecycle

Page 42: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

singleTask

Created at the root of a new task

Only one instance of the activity can exist at a time

onNewIntent() is called if an instance of the activity already exists

Page 43: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

singleInstance

Like singleTop but the only member of its task

Any activities started will open in a separate task.

Page 44: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Examples of launchModes

• singleTop: Dashboard, Search

• singleTask: Browser, Google Maps

• singleInstance: Home screen

Page 45: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Intent flags and launchModes

Page 46: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

FLAG_ACTIVITY_SINGLE_TOP

Page 47: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

FLAG_ACTIVITY_MULTIPLE_TASK

FLAG_ACTIVITY_NEW_TASK

Force an activity to a new task

Not recommended!

Page 48: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

FLAG_ACTIVITY_NO_HISTORY

Page 49: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

FLAG_ACTIVITY_CLEAR_TOP

Page 50: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

FLAG_ACTIVITY_REORDER_TO_FRONT

Page 51: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

The new activity is not kept in the list of recently launched activities

Page 52: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETFLAG_ACTIVITY_RESET_TASK_IF_NEEDED

Page 53: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Other manifest attributes to help deal with activities and tasks

Page 54: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

android:taskAffinity

• Useful to ensure certain activities are always in the same task

• By default, all activities in an application have the same affinity

• singleTask Gotcha!!!

Page 55: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

android:allowTaskReparenting

• Next time an activity comes to the front, move it to a task it has an affinity for

• Eg: email and browser

Page 56: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

android:clearTaskOnLaunch

• Clear all activities from the task except the root, when launching the app from the home screen

• Only honoured for activities that start a new task

• Can be combined with “allowTaskReparenting”

Page 57: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

android:alwaysRetainTaskState

• The state of the task is mantained by the system, even after a long period of time

• Only honoured for activities that start a new task

• Eg: browser tabs

Page 58: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

android:finishOnTaskLaunch

• Shut down an instance of an activity when its task is resumed

• Trumps android:alwaysRetainTaskState

Page 59: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

singleTask and singleInstance change the UI flow

Use with caution!

Page 60: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

singleTask UI flow

Page 61: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 62: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 63: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 64: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

singleInstance UI flow

Page 65: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 66: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 67: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 68: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 69: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Page 70: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Two launcher icons

Page 71: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Provide a launcher icon for each singleTask / singleInstance activity

Page 72: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Another disadvantage:

startActivityForResult()

Page 73: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Recommended launchModes:

standard and singleTop with intent flags combinations will suit most use cases

Page 74: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

To recap:

• Activities and how they live in tasks• Intents and re-using activities in other apps• Activity lifecycle and the four launchmodes• Intent flags and manifest attributes• singleTask and singleInstance disadvantages

Page 75: Android | Android Activity Launch Modes and Tasks | Gonçalo Silva

Thank you for listening!

Any Questions?