public class FlutterActivity extends Activity implements android.arch.lifecycle.LifecycleOwner
Activity
which displays a fullscreen Flutter UI.
FlutterActivity
is the simplest and most direct way to integrate Flutter within an
Android app.
Dart entrypoint, initial route, and app bundle path
The Dart entrypoint executed within this Activity
is "main()" by default. To change the
entrypoint that a FlutterActivity
executes, subclass FlutterActivity
and
override getDartEntrypointFunctionName()
.
The Flutter route that is initially loaded within this Activity
is "/". The initial
route may be specified explicitly by passing the name of the route as a String
in
FlutterActivityLaunchConfigs.EXTRA_INITIAL_ROUTE
, e.g., "my/deep/link".
The initial route can each be controlled using a FlutterActivity.NewEngineIntentBuilder
via
FlutterActivity.NewEngineIntentBuilder.initialRoute
.
The app bundle path, Dart entrypoint, and initial route can also be controlled in a subclass of
FlutterActivity
by overriding their respective methods:
The Dart entrypoint and app bundle path are not supported as Intent
parameters due to
security concerns. If such configurations were exposed via Intent
, then a
FlutterActivity
that is exported
from your Android app would allow other apps to
invoke arbitrary Dart entrypoints in your app by specifying different Dart entrypoints for your
FlutterActivity
. Therefore, these configurations are not available via Intent
.
Using a cached FlutterEngine
FlutterActivity
can be used with a cached FlutterEngine
instead of creating a new
one. Use withCachedEngine(String)
to build a FlutterActivity
Intent
that
is configured to use an existing, cached FlutterEngine
.
FlutterEngineCache
is the cache that is used to obtain a
given cached FlutterEngine
. An IllegalStateException
will be thrown if a cached
engine is requested but does not exist in the cache.
When using a cached FlutterEngine
, that FlutterEngine
should already be executing
Dart code, which means that the Dart entrypoint and initial route have already been defined.
Therefore, FlutterActivity.CachedEngineIntentBuilder
does not offer configuration of these properties.
It is generally recommended to use a cached FlutterEngine
to avoid a momentary delay
when initializing a new FlutterEngine
. The two exceptions to using a cached
FlutterEngine
are:
FlutterActivity
is the first Activity
displayed by the app, because
pre-warming a FlutterEngine
would have no impact in this situation.
The following illustrates how to pre-warm and cache a FlutterEngine
:
// Create and pre-warm a FlutterEngine.
FlutterEngine flutterEngine = new FlutterEngine(context);
flutterEngine
.getDartExecutor()
.executeDartEntrypoint(DartEntrypoint.createDefault());
// Cache the pre-warmed FlutterEngine in the FlutterEngineCache.
FlutterEngineCache.getInstance().put("my_engine", flutterEngine);
Alternatives to FlutterActivity
If Flutter is needed in a location that cannot use an Activity
, consider using
a FlutterFragment
. Using a FlutterFragment
requires forwarding some calls from
an Activity
to the FlutterFragment
.
If Flutter is needed in a location that can only use a View
, consider using a
FlutterView
. Using a FlutterView
requires forwarding some calls from an
Activity
, as well as forwarding lifecycle calls from an Activity
or a
Fragment
.
FlutterActivity responsibilities
FlutterActivity
maintains the following responsibilities:
Activity
transparently, if desired.FlutterEngine
.Launch Screen and Splash Screen
FlutterActivity
supports the display of an Android "launch screen" as well as a
Flutter-specific "splash screen". The launch screen is displayed while the Android application
loads. It is only applicable if FlutterActivity
is the first Activity
displayed
upon loading the app. After the launch screen passes, a splash screen is optionally displayed.
The splash screen is displayed for as long as it takes Flutter to initialize and render its
first frame.
Use Android themes to display a launch screen. Create two themes: a launch theme and a normal
theme. In the launch theme, set windowBackground
to the desired Drawable
for
the launch screen. In the normal theme, set windowBackground
to any desired background
color that should normally appear behind your Flutter content. In most cases this background
color will never be seen, but for possible transition edge cases it is a good idea to explicitly
replace the launch screen window background with a neutral color.
Do not change aspects of system chrome between a launch theme and normal theme. Either define both themes to be fullscreen or not, and define both themes to display the same status bar and navigation bar settings. To adjust system chrome once the Flutter app renders, use platform channels to instruct Android to do so at the appropriate time. This will avoid any jarring visual changes during app startup.
In the AndroidManifest.xml, set the theme of FlutterActivity
to the defined launch theme.
In the metadata section for FlutterActivity
, defined the following reference to your
normal theme:
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/YourNormalTheme"
/>
With themes defined, and AndroidManifest.xml updated, Flutter displays the specified launch
screen until the Android application is initialized.
Flutter also requires initialization time. To specify a splash screen for Flutter initialization,
subclass FlutterActivity
and override provideSplashScreen()
. See
SplashScreen
for details on implementing a splash screen.
Flutter ships with a splash screen that automatically displays the exact same
windowBackground
as the launch theme discussed previously. To use that splash screen,
include the following metadata in AndroidManifest.xml for this FlutterActivity
:
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true"
/>
Alternative Activity
FlutterFragmentActivity
is also available, which is similar to FlutterActivity
but it extends FragmentActivity
. You should use FlutterActivity
, if possible,
but if you need a FragmentActivity
then you should use FlutterFragmentActivity
.
Modifier and Type | Class and Description |
---|---|
static class |
FlutterActivity.CachedEngineIntentBuilder
Builder to create an
Intent that launches a FlutterActivity with an existing
FlutterEngine that is cached in FlutterEngineCache . |
static class |
FlutterActivity.NewEngineIntentBuilder
Builder to create an
Intent that launches a FlutterActivity with a new
FlutterEngine and the desired configuration. |
Modifier and Type | Field and Description |
---|---|
protected io.flutter.embedding.android.FlutterActivityAndFragmentDelegate |
delegate |
DEFAULT_KEYS_DIALER, DEFAULT_KEYS_DISABLE, DEFAULT_KEYS_SEARCH_GLOBAL, DEFAULT_KEYS_SEARCH_LOCAL, DEFAULT_KEYS_SHORTCUT, FOCUSED_STATE_SET, RESULT_CANCELED, RESULT_FIRST_USER, RESULT_OK
ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ALARM_SERVICE, APP_OPS_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_EXTERNAL_SERVICE, BIND_IMPORTANT, BIND_INCLUDE_CAPABILITIES, BIND_NOT_FOREGROUND, BIND_WAIVE_PRIORITY, BIOMETRIC_SERVICE, BLUETOOTH_SERVICE, CAMERA_SERVICE, CAPTIONING_SERVICE, CARRIER_CONFIG_SERVICE, CLIPBOARD_SERVICE, COMPANION_DEVICE_SERVICE, CONNECTIVITY_SERVICE, CONSUMER_IR_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, CROSS_PROFILE_APPS_SERVICE, DEVICE_POLICY_SERVICE, DISPLAY_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, EUICC_SERVICE, FINGERPRINT_SERVICE, HARDWARE_PROPERTIES_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, IPSEC_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCATION_SERVICE, MEDIA_PROJECTION_SERVICE, MEDIA_ROUTER_SERVICE, MEDIA_SESSION_SERVICE, MIDI_SERVICE, MODE_APPEND, MODE_ENABLE_WRITE_AHEAD_LOGGING, MODE_MULTI_PROCESS, MODE_NO_LOCALIZED_COLLATORS, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, NETWORK_STATS_SERVICE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, POWER_SERVICE, PRINT_SERVICE, RECEIVER_VISIBLE_TO_INSTANT_APPS, RESTRICTIONS_SERVICE, ROLE_SERVICE, SEARCH_SERVICE, SENSOR_SERVICE, SHORTCUT_SERVICE, STORAGE_SERVICE, STORAGE_STATS_SERVICE, SYSTEM_HEALTH_SERVICE, TELECOM_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TEXT_CLASSIFICATION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TV_INPUT_SERVICE, UI_MODE_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_SERVICE, WALLPAPER_SERVICE, WIFI_AWARE_SERVICE, WIFI_P2P_SERVICE, WIFI_RTT_RANGING_SERVICE, WIFI_SERVICE, WINDOW_SERVICE
TRIM_MEMORY_BACKGROUND, TRIM_MEMORY_COMPLETE, TRIM_MEMORY_MODERATE, TRIM_MEMORY_RUNNING_CRITICAL, TRIM_MEMORY_RUNNING_LOW, TRIM_MEMORY_RUNNING_MODERATE, TRIM_MEMORY_UI_HIDDEN
Constructor and Description |
---|
FlutterActivity() |
Modifier and Type | Method and Description |
---|---|
void |
cleanUpFlutterEngine(FlutterEngine flutterEngine)
Hook for the host to cleanup references that were established in
configureFlutterEngine(FlutterEngine) before the host is destroyed or detached. |
void |
configureFlutterEngine(FlutterEngine flutterEngine)
Hook for subclasses to easily configure a
FlutterEngine , e.g., register
plugins. |
static Intent |
createDefaultIntent(Context launchContext)
Creates an
Intent that launches a FlutterActivity , which executes
a main() Dart entrypoint, and displays the "/" route as Flutter's initial route. |
Activity |
getActivity()
FlutterActivityAndFragmentDelegate.Host method that is used by
FlutterActivityAndFragmentDelegate to obtain an Activity reference as
needed. |
String |
getAppBundlePath()
The path to the bundle that contains this Flutter app's resources, e.g., Dart code snapshots.
|
protected FlutterActivityLaunchConfigs.BackgroundMode |
getBackgroundMode()
The desired window background mode of this
Activity , which defaults to
FlutterActivityLaunchConfigs.BackgroundMode.opaque . |
String |
getCachedEngineId()
Returns the ID of a statically cached
FlutterEngine to use within this
FlutterActivity , or null if this FlutterActivity does not want to
use a cached FlutterEngine . |
Context |
getContext()
FlutterActivityAndFragmentDelegate.Host method that is used by
FlutterActivityAndFragmentDelegate to obtain a Context reference as
needed. |
String |
getDartEntrypointFunctionName()
The Dart entrypoint that will be executed as soon as the Dart snapshot is loaded.
|
protected FlutterEngine |
getFlutterEngine()
Hook for subclasses to obtain a reference to the
FlutterEngine that is owned
by this FlutterActivity . |
FlutterShellArgs |
getFlutterShellArgs()
FlutterActivityAndFragmentDelegate.Host method that is used by
FlutterActivityAndFragmentDelegate to obtain Flutter shell arguments when
initializing Flutter. |
String |
getInitialRoute()
The initial route that a Flutter app will render upon loading and executing its Dart code.
|
android.arch.lifecycle.Lifecycle |
getLifecycle()
FlutterActivityAndFragmentDelegate.Host method that is used by
FlutterActivityAndFragmentDelegate to obtain a Lifecycle reference as
needed. |
FlutterView.RenderMode |
getRenderMode()
FlutterActivityAndFragmentDelegate.Host method that is used by
FlutterActivityAndFragmentDelegate to obtain the desired FlutterView.RenderMode
that should be used when instantiating a FlutterView . |
FlutterView.TransparencyMode |
getTransparencyMode()
FlutterActivityAndFragmentDelegate.Host method that is used by
FlutterActivityAndFragmentDelegate to obtain the desired
FlutterView.TransparencyMode that should be used when instantiating a
FlutterView . |
protected void |
onActivityResult(int requestCode,
int resultCode,
Intent data) |
void |
onBackPressed() |
protected void |
onCreate(Bundle savedInstanceState) |
protected void |
onDestroy() |
void |
onFlutterUiDisplayed()
Invoked by this delegate when its
FlutterView starts painting pixels. |
void |
onFlutterUiNoLongerDisplayed()
Invoked by this delegate when its
FlutterView stops painting pixels. |
protected void |
onNewIntent(Intent intent) |
protected void |
onPause() |
void |
onPostResume() |
void |
onRequestPermissionsResult(int requestCode,
String[] permissions,
int[] grantResults) |
protected void |
onResume() |
protected void |
onSaveInstanceState(Bundle outState) |
protected void |
onStart() |
protected void |
onStop() |
void |
onTrimMemory(int level) |
void |
onUserLeaveHint() |
FlutterEngine |
provideFlutterEngine(Context context)
Hook for subclasses to easily provide a custom
FlutterEngine . |
PlatformPlugin |
providePlatformPlugin(Activity activity,
FlutterEngine flutterEngine)
Hook for the host to create/provide a
PlatformPlugin if the associated
Flutter experience should control system chrome. |
SplashScreen |
provideSplashScreen()
Provides a
SplashScreen to display while Flutter initializes and renders its first
frame. |
boolean |
shouldAttachEngineToActivity()
Hook for subclasses to control whether or not the
FlutterFragment within this
Activity automatically attaches its FlutterEngine to this Activity . |
boolean |
shouldDestroyEngineWithHost()
Returns false if the
FlutterEngine backing this FlutterActivity should
outlive this FlutterActivity , or true to be destroyed when the FlutterActivity
is destroyed. |
static FlutterActivity.CachedEngineIntentBuilder |
withCachedEngine(String cachedEngineId)
Creates a
FlutterActivity.CachedEngineIntentBuilder , which can be used to configure an Intent
to launch a FlutterActivity that internally uses an existing FlutterEngine that
is cached in FlutterEngineCache . |
static FlutterActivity.NewEngineIntentBuilder |
withNewEngine()
Creates an
FlutterActivity.NewEngineIntentBuilder , which can be used to configure an Intent to
launch a FlutterActivity that internally creates a new FlutterEngine using
the desired Dart entrypoint, initial route, etc. |
addContentView, attachBaseContext, closeContextMenu, closeOptionsMenu, createPendingResult, dismissDialog, dismissKeyboardShortcutsHelper, dispatchGenericMotionEvent, dispatchKeyEvent, dispatchKeyShortcutEvent, dispatchPopulateAccessibilityEvent, dispatchTouchEvent, dispatchTrackballEvent, dump, enterPictureInPictureMode, enterPictureInPictureMode, findViewById, finish, finishActivity, finishActivityFromChild, finishAffinity, finishAfterTransition, finishAndRemoveTask, finishFromChild, getActionBar, getApplication, getCallingActivity, getCallingPackage, getChangingConfigurations, getComponentName, getContentScene, getContentTransitionManager, getCurrentFocus, getFragmentManager, getIntent, getLastNonConfigurationInstance, getLayoutInflater, getLoaderManager, getLocalClassName, getMaxNumPictureInPictureActions, getMediaController, getMenuInflater, getParent, getParentActivityIntent, getPreferences, getReferrer, getRequestedOrientation, getSearchEvent, getSystemService, getTaskId, getTitle, getTitleColor, getVoiceInteractor, getVolumeControlStream, getWindow, getWindowManager, hasWindowFocus, invalidateOptionsMenu, isActivityTransitionRunning, isChangingConfigurations, isChild, isDestroyed, isFinishing, isImmersive, isInMultiWindowMode, isInPictureInPictureMode, isLocalVoiceInteractionSupported, isTaskRoot, isVoiceInteraction, isVoiceInteractionRoot, managedQuery, moveTaskToBack, navigateUpTo, navigateUpToFromChild, onActionModeFinished, onActionModeStarted, onActivityReenter, onApplyThemeResource, onAttachedToWindow, onAttachFragment, onChildTitleChanged, onConfigurationChanged, onContentChanged, onContextItemSelected, onContextMenuClosed, onCreate, onCreateContextMenu, onCreateDescription, onCreateDialog, onCreateDialog, onCreateNavigateUpTaskStack, onCreateOptionsMenu, onCreatePanelMenu, onCreatePanelView, onCreateThumbnail, onCreateView, onCreateView, onDetachedFromWindow, onEnterAnimationComplete, onGenericMotionEvent, onGetDirectActions, onKeyDown, onKeyLongPress, onKeyMultiple, onKeyShortcut, onKeyUp, onLocalVoiceInteractionStarted, onLocalVoiceInteractionStopped, onLowMemory, onMenuItemSelected, onMenuOpened, onMultiWindowModeChanged, onMultiWindowModeChanged, onNavigateUp, onNavigateUpFromChild, onOptionsItemSelected, onOptionsMenuClosed, onPanelClosed, onPerformDirectAction, onPictureInPictureModeChanged, onPictureInPictureModeChanged, onPostCreate, onPostCreate, onPrepareDialog, onPrepareDialog, onPrepareNavigateUpTaskStack, onPrepareOptionsMenu, onPreparePanel, onProvideAssistContent, onProvideAssistData, onProvideKeyboardShortcuts, onProvideReferrer, onRestart, onRestoreInstanceState, onRestoreInstanceState, onRetainNonConfigurationInstance, onSaveInstanceState, onSearchRequested, onSearchRequested, onStateNotSaved, onTitleChanged, onTopResumedActivityChanged, onTouchEvent, onTrackballEvent, onUserInteraction, onVisibleBehindCanceled, onWindowAttributesChanged, onWindowFocusChanged, onWindowStartingActionMode, onWindowStartingActionMode, openContextMenu, openOptionsMenu, overridePendingTransition, postponeEnterTransition, recreate, registerActivityLifecycleCallbacks, registerForContextMenu, releaseInstance, removeDialog, reportFullyDrawn, requestDragAndDropPermissions, requestPermissions, requestShowKeyboardShortcuts, requestVisibleBehind, requestWindowFeature, requireViewById, runOnUiThread, setActionBar, setContentTransitionManager, setContentView, setContentView, setContentView, setDefaultKeyMode, setEnterSharedElementCallback, setExitSharedElementCallback, setFeatureDrawable, setFeatureDrawableAlpha, setFeatureDrawableResource, setFeatureDrawableUri, setFinishOnTouchOutside, setImmersive, setInheritShowWhenLocked, setIntent, setMediaController, setPictureInPictureParams, setProgress, setProgressBarIndeterminate, setProgressBarIndeterminateVisibility, setProgressBarVisibility, setRequestedOrientation, setResult, setResult, setSecondaryProgress, setShowWhenLocked, setTaskDescription, setTheme, setTitle, setTitle, setTitleColor, setTurnScreenOn, setVisible, setVolumeControlStream, setVrModeEnabled, shouldShowRequestPermissionRationale, shouldUpRecreateTask, showAssist, showDialog, showDialog, showLockTaskEscapeMessage, startActionMode, startActionMode, startActivities, startActivities, startActivity, startActivity, startActivityForResult, startActivityForResult, startActivityFromChild, startActivityFromChild, startActivityFromFragment, startActivityFromFragment, startActivityIfNeeded, startActivityIfNeeded, startIntentSender, startIntentSender, startIntentSenderForResult, startIntentSenderForResult, startIntentSenderFromChild, startIntentSenderFromChild, startLocalVoiceInteraction, startLockTask, startManagingCursor, startNextMatchingActivity, startNextMatchingActivity, startPostponedEnterTransition, startSearch, stopLocalVoiceInteraction, stopLockTask, stopManagingCursor, takeKeyEvents, triggerSearch, unregisterActivityLifecycleCallbacks, unregisterForContextMenu
applyOverrideConfiguration, getAssets, getResources, getTheme, setTheme
bindIsolatedService, bindService, bindService, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingPermission, checkCallingUriPermission, checkPermission, checkSelfPermission, checkUriPermission, checkUriPermission, clearWallpaper, createConfigurationContext, createContextForSplit, createDeviceProtectedStorageContext, createDisplayContext, createPackageContext, databaseList, deleteDatabase, deleteFile, deleteSharedPreferences, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getBaseContext, getCacheDir, getClassLoader, getCodeCacheDir, getContentResolver, getDatabasePath, getDataDir, getDir, getExternalCacheDir, getExternalCacheDirs, getExternalFilesDir, getExternalFilesDirs, getExternalMediaDirs, getFilesDir, getFileStreamPath, getMainExecutor, getMainLooper, getNoBackupFilesDir, getObbDir, getObbDirs, getOpPackageName, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getSharedPreferences, getSystemServiceName, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isDeviceProtectedStorage, isRestricted, moveDatabaseFrom, moveSharedPreferencesFrom, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerReceiver, registerReceiver, registerReceiver, registerReceiver, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeUriPermission, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setWallpaper, setWallpaper, startForegroundService, startInstrumentation, startService, stopService, unbindService, unregisterReceiver, updateServiceGroup
getColor, getColorStateList, getDrawable, getString, getString, getSystemService, getText, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, registerComponentCallbacks, unregisterComponentCallbacks
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
onPointerCaptureChanged
protected io.flutter.embedding.android.FlutterActivityAndFragmentDelegate delegate
@NonNull public static Intent createDefaultIntent(@NonNull Context launchContext)
Intent
that launches a FlutterActivity
, which executes
a main()
Dart entrypoint, and displays the "/" route as Flutter's initial route.@NonNull public static FlutterActivity.NewEngineIntentBuilder withNewEngine()
FlutterActivity.NewEngineIntentBuilder
, which can be used to configure an Intent
to
launch a FlutterActivity
that internally creates a new FlutterEngine
using
the desired Dart entrypoint, initial route, etc.public static FlutterActivity.CachedEngineIntentBuilder withCachedEngine(@NonNull String cachedEngineId)
FlutterActivity.CachedEngineIntentBuilder
, which can be used to configure an Intent
to launch a FlutterActivity
that internally uses an existing FlutterEngine
that
is cached in FlutterEngineCache
.@Nullable public SplashScreen provideSplashScreen()
SplashScreenProvider
SplashScreen
to display while Flutter initializes and renders its first
frame.public void onPostResume()
onPostResume
in class Activity
protected void onSaveInstanceState(Bundle outState)
onSaveInstanceState
in class Activity
protected void onActivityResult(int requestCode, int resultCode, Intent data)
onActivityResult
in class Activity
protected void onNewIntent(@NonNull Intent intent)
onNewIntent
in class Activity
public void onBackPressed()
onBackPressed
in class Activity
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
onRequestPermissionsResult
in class Activity
public void onUserLeaveHint()
onUserLeaveHint
in class Activity
public void onTrimMemory(int level)
onTrimMemory
in interface ComponentCallbacks2
onTrimMemory
in class Activity
@NonNull public Context getContext()
FlutterActivityAndFragmentDelegate.Host
method that is used by
FlutterActivityAndFragmentDelegate
to obtain a Context
reference as
needed.@NonNull public Activity getActivity()
FlutterActivityAndFragmentDelegate.Host
method that is used by
FlutterActivityAndFragmentDelegate
to obtain an Activity
reference as
needed. This reference is used by the delegate to instantiate a FlutterView
,
a PlatformPlugin
, and to determine if the Activity
is changing
configurations.@NonNull public android.arch.lifecycle.Lifecycle getLifecycle()
FlutterActivityAndFragmentDelegate.Host
method that is used by
FlutterActivityAndFragmentDelegate
to obtain a Lifecycle
reference as
needed. This reference is used by the delegate to provide Flutter plugins with access
to lifecycle events.getLifecycle
in interface android.arch.lifecycle.LifecycleOwner
@NonNull public FlutterShellArgs getFlutterShellArgs()
FlutterActivityAndFragmentDelegate.Host
method that is used by
FlutterActivityAndFragmentDelegate
to obtain Flutter shell arguments when
initializing Flutter.@Nullable public String getCachedEngineId()
FlutterEngine
to use within this
FlutterActivity
, or null
if this FlutterActivity
does not want to
use a cached FlutterEngine
.public boolean shouldDestroyEngineWithHost()
FlutterEngine
backing this FlutterActivity
should
outlive this FlutterActivity
, or true to be destroyed when the FlutterActivity
is destroyed.
The default value is true
in cases where FlutterActivity
created its own
FlutterEngine
, and false
in cases where a cached FlutterEngine
was
provided.
@NonNull public String getDartEntrypointFunctionName()
This preference can be controlled by setting a <meta-data>
called
FlutterActivityLaunchConfigs.DART_ENTRYPOINT_META_DATA_KEY
within the Android manifest
definition for this FlutterActivity
.
Subclasses may override this method to directly control the Dart entrypoint.
@NonNull public String getInitialRoute()
This preference can be controlled with 2 methods:
FlutterActivityLaunchConfigs.EXTRA_INITIAL_ROUTE
with the
launching Intent
, or<meta-data>
called
FlutterActivityLaunchConfigs.INITIAL_ROUTE_META_DATA_KEY
for this Activity
in the Android manifest.Intent
preference takes priority.
The reason that a <meta-data>
preference is supported is because this Activity
might be the very first Activity
launched, which means the developer won't have
control over the incoming Intent
.
Subclasses may override this method to directly control the initial route.
@NonNull public String getAppBundlePath()
When this FlutterActivity
is run by Flutter tooling and a data String is included
in the launching Intent
, that data String is interpreted as an app bundle path.
By default, the app bundle path is obtained from FlutterMain.findAppBundlePath()
.
Subclasses may override this method to return a custom app bundle path.
@NonNull public FlutterView.RenderMode getRenderMode()
FlutterActivityAndFragmentDelegate.Host
method that is used by
FlutterActivityAndFragmentDelegate
to obtain the desired FlutterView.RenderMode
that should be used when instantiating a FlutterView
.@NonNull public FlutterView.TransparencyMode getTransparencyMode()
FlutterActivityAndFragmentDelegate.Host
method that is used by
FlutterActivityAndFragmentDelegate
to obtain the desired
FlutterView.TransparencyMode
that should be used when instantiating a
FlutterView
.@NonNull protected FlutterActivityLaunchConfigs.BackgroundMode getBackgroundMode()
Activity
, which defaults to
FlutterActivityLaunchConfigs.BackgroundMode.opaque
.@Nullable public FlutterEngine provideFlutterEngine(@NonNull Context context)
FlutterEngine
.
This hook is where a cached FlutterEngine
should be provided, if a cached
FlutterEngine
is desired.
@Nullable protected FlutterEngine getFlutterEngine()
FlutterEngine
that is owned
by this FlutterActivity
.@Nullable public PlatformPlugin providePlatformPlugin(@Nullable Activity activity, @NonNull FlutterEngine flutterEngine)
PlatformPlugin
if the associated
Flutter experience should control system chrome.public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine)
FlutterEngine
, e.g., register
plugins.
This method is called after provideFlutterEngine(Context)
.
public void cleanUpFlutterEngine(@NonNull FlutterEngine flutterEngine)
configureFlutterEngine(FlutterEngine)
before the host is destroyed or detached.
This method is called in onDestroy()
.
public boolean shouldAttachEngineToActivity()
FlutterFragment
within this
Activity
automatically attaches its FlutterEngine
to this Activity
.
This property is controlled with a protected method instead of an Intent
argument because
the only situation where changing this value would help, is a situation in which
FlutterActivity
is being subclassed to utilize a custom and/or cached FlutterEngine
.
Defaults to true
.
Control surfaces are used to provide Android resources and lifecycle events to
plugins that are attached to the FlutterEngine
. If shouldAttachEngineToActivity
is true then this FlutterActivity
will connect its FlutterEngine
to itself,
along with any plugins that are registered with that FlutterEngine
. This allows
plugins to access the Activity
, as well as receive Activity
-specific calls,
e.g., Activity.onNewIntent(Intent)
. If shouldAttachEngineToActivity
is false,
then this FlutterActivity
will not automatically manage the connection between its
FlutterEngine
and itself. In this case, plugins will not be offered a reference to
an Activity
or its OS hooks.
Returning false from this method does not preclude a FlutterEngine
from being
attaching to a FlutterActivity
- it just prevents the attachment from happening
automatically. A developer can choose to subclass FlutterActivity
and then
invoke ActivityControlSurface.attachToActivity(Activity, Lifecycle)
and ActivityControlSurface.detachFromActivity()
at the desired times.
One reason that a developer might choose to manually manage the relationship between the
Activity
and FlutterEngine
is if the developer wants to move the
FlutterEngine
somewhere else. For example, a developer might want the
FlutterEngine
to outlive this FlutterActivity
so that it can be used
later in a different Activity
. To accomplish this, the FlutterEngine
may
need to be disconnected from this FluttterActivity
at an unusual time, preventing
this FlutterActivity
from correctly managing the relationship between the
FlutterEngine
and itself.
public void onFlutterUiDisplayed()
FlutterView
starts painting pixels.public void onFlutterUiNoLongerDisplayed()
FlutterView
stops painting pixels.