fix: [android] Bound the IrisMethodChannel lifecycle with the FlutterEngine #75
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
At this time, if the
IrisMethodChannel.dispose
not be called explicitly, the native resources created (created viaNativeBindingDelegate.createNativeApiEngine
) by theIrisMethodChannel
can not be cleaned. So the native resources only be cleaned when the APP process is killed.But by default, the
FlutterEngine
lifecycle is bound to the androidActivity
lifecycle. In the single Flutter APP, theFlutterEngine
is killed when the whole APP exit(theActivity.onDestory
has been called), at this time, the whole APP exit, and the APP process has been killed, so the native resources created by theIrisMethodChannel
can be cleaned depending on the process lifecycle.But in some scenarios, say that start a foreground service in android, when you try to remove the APP from the recent list, the
Activity
has been removed, theFlutterEngine
has been destroyed, but the APP still running (the process not be killed), which will cause the memory leak, and unexpected behavior.So we need to notify the
IrisMethodChannel
(dart side) to clean the native resources when theFlutterEngine
is destroyed.