Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
flutter_boost_1.22.4
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李增强
flutter_boost_1.22.4
Commits
c1c82460
Commit
c1c82460
authored
Oct 23, 2019
by
yangwu.jia
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增engine destroy 的方式,默认和app共存
parent
01ab95a8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
73 additions
and
77 deletions
+73
-77
android/src/main/java/com/idlefish/flutterboost/FlutterViewContainerManager.java
...om/idlefish/flutterboost/FlutterViewContainerManager.java
+7
-0
android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
.../main/java/com/idlefish/flutterboost/NewFlutterBoost.java
+61
-17
android/src/main/java/com/idlefish/flutterboost/Platform.java
...oid/src/main/java/com/idlefish/flutterboost/Platform.java
+1
-26
android/src/main/java/com/idlefish/flutterboost/containers/FlutterActivityAndFragmentDelegate.java
...rboost/containers/FlutterActivityAndFragmentDelegate.java
+4
-34
No files found.
android/src/main/java/com/idlefish/flutterboost/FlutterViewContainerManager.java
View file @
c1c82460
...
...
@@ -84,6 +84,13 @@ public class FlutterViewContainerManager implements IContainerManager {
void
removeRecord
(
IContainerRecord
record
)
{
mRecordStack
.
remove
(
record
);
mRecordMap
.
remove
(
record
.
getContainer
());
if
(
mRecordStack
.
empty
()){
if
(
NewFlutterBoost
.
instance
().
platform
().
whenEngineDestroy
()==
NewFlutterBoost
.
ConfigBuilder
.
All_FLUTTER_ACTIVITY_DESTROY
){
NewFlutterBoost
.
instance
().
boostDestroy
();
}
}
}
void
setContainerResult
(
IContainerRecord
record
,
int
requestCode
,
int
resultCode
,
Map
<
String
,
Object
>
result
)
{
...
...
android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
View file @
c1c82460
...
...
@@ -10,6 +10,7 @@ import com.idlefish.flutterboost.interfaces.*;
import
io.flutter.Log
;
import
io.flutter.embedding.android.FlutterView
;
import
io.flutter.embedding.engine.FlutterEngine
;
import
io.flutter.embedding.engine.FlutterShellArgs
;
import
io.flutter.embedding.engine.dart.DartExecutor
;
import
io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry
;
import
io.flutter.plugin.common.PluginRegistry
;
...
...
@@ -23,7 +24,7 @@ public class NewFlutterBoost {
private
Platform
mPlatform
;
private
FlutterViewContainerManager
mManager
;
private
FlutterEngine
mEngine
;
private
Activity
mCurrentActiveActivity
;
private
PluginRegistry
mRegistry
;
static
NewFlutterBoost
sInstance
=
null
;
...
...
@@ -53,7 +54,7 @@ public class NewFlutterBoost {
if
(
mPlatform
.
whenEngineStart
()
==
ConfigBuilder
.
ANY_ACTIVITY_CREATED
)
{
Log
.
e
(
"bbbb2"
,
"xxxxx"
);
doInitialFlutter
(
mPlatform
);
doInitialFlutter
();
}
}
...
...
@@ -87,7 +88,7 @@ public class NewFlutterBoost {
if
(
mCurrentActiveActivity
==
activity
)
{
Debuger
.
log
(
"Application entry background"
);
if
(
mPlatform
.
engineProvider
()
!=
null
)
{
if
(
engineProvider
()
!=
null
)
{
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"type"
,
"background"
);
channel
().
sendEvent
(
"lifecycle"
,
map
);
...
...
@@ -106,7 +107,7 @@ public class NewFlutterBoost {
if
(
mCurrentActiveActivity
==
activity
)
{
Debuger
.
log
(
"Application entry background"
);
if
(
mPlatform
.
engineProvider
()
!=
null
)
{
if
(
engineProvider
()
!=
null
)
{
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"type"
,
"background"
);
channel
().
sendEvent
(
"lifecycle"
,
map
);
...
...
@@ -118,19 +119,19 @@ public class NewFlutterBoost {
if
(
mPlatform
.
whenEngineStart
()
==
ConfigBuilder
.
IMMEDIATELY
)
{
doInitialFlutter
(
mPlatform
);
doInitialFlutter
();
}
}
p
rivate
void
doInitialFlutter
(
Platform
platform
)
{
p
ublic
void
doInitialFlutter
(
)
{
if
(
platform
.
getEngine
()
!=
null
)
return
;
if
(
mEngine
!=
null
)
return
;
FlutterEngine
flutterEngine
=
platform
.
engineProvider
();
FlutterEngine
flutterEngine
=
engineProvider
();
if
(
flutterEngine
.
getDartExecutor
().
isExecutingDart
())
{
// No warning is logged because this situation will happen on every config
...
...
@@ -139,13 +140,12 @@ public class NewFlutterBoost {
return
;
}
mRegistry
=
new
ShimPluginRegistry
(
mPlatform
.
engineProvider
());
// The engine needs to receive the Flutter app's initial route before executing any
// Dart code to ensure that the initial route arrives in time to be applied.
if
(
p
latform
.
initialRoute
()
!=
null
)
{
flutterEngine
.
getNavigationChannel
().
setInitialRoute
(
p
latform
.
initialRoute
());
if
(
mP
latform
.
initialRoute
()
!=
null
)
{
flutterEngine
.
getNavigationChannel
().
setInitialRoute
(
mP
latform
.
initialRoute
());
}
// Configure the Dart entrypoint and execute it.
DartExecutor
.
DartEntrypoint
entrypoint
=
new
DartExecutor
.
DartEntrypoint
(
...
...
@@ -153,6 +153,9 @@ public class NewFlutterBoost {
"main"
);
flutterEngine
.
getDartExecutor
().
executeDartEntrypoint
(
entrypoint
);
mRegistry
=
new
ShimPluginRegistry
(
engineProvider
());
}
...
...
@@ -164,10 +167,17 @@ public class NewFlutterBoost {
public
static
int
ANY_ACTIVITY_CREATED
=
1
;
//当有任何Activity创建时,启动引擎
public
static
int
FLUTTER_ACTIVITY_CREATED
=
2
;
//当有任何Activity创建时,启动引擎
public
static
int
APP_EXit
=
0
;
//所有flutter Activity destory 时,销毁engine
public
static
int
All_FLUTTER_ACTIVITY_DESTROY
=
1
;
//所有flutter Activity destory 时,销毁engine
private
String
dartEntrypoint
=
DEFAULT_DART_ENTRYPOINT
;
private
String
initialRoute
=
DEFAULT_INITIAL_ROUTE
;
private
int
whenEngineStart
=
ANY_ACTIVITY_CREATED
;
private
int
whenEngineDestory
=
APP_EXit
;
private
boolean
isDebug
=
false
;
...
...
@@ -207,7 +217,10 @@ public class NewFlutterBoost {
this
.
whenEngineStart
=
whenEngineStart
;
return
this
;
}
public
ConfigBuilder
whenEngineDestory
(
@NonNull
int
whenEngineDestory
)
{
this
.
whenEngineDestory
=
whenEngineDestory
;
return
this
;
}
public
Platform
build
()
{
Platform
platform
=
new
Platform
()
{
...
...
@@ -235,6 +248,11 @@ public class NewFlutterBoost {
return
ConfigBuilder
.
this
.
whenEngineStart
;
}
@Override
public
int
whenEngineDestroy
()
{
return
ConfigBuilder
.
this
.
whenEngineDestory
;
}
public
FlutterView
.
RenderMode
renderMode
()
{
return
ConfigBuilder
.
this
.
renderMode
;
}
...
...
@@ -246,11 +264,6 @@ public class NewFlutterBoost {
}
public
FlutterEngine
engineProvider
()
{
return
sInstance
.
mPlatform
.
engineProvider
();
}
public
IContainerManager
containerManager
()
{
return
sInstance
.
mManager
;
}
...
...
@@ -274,4 +287,35 @@ public class NewFlutterBoost {
public
PluginRegistry
getPluginRegistry
(){
return
mRegistry
;
}
public
FlutterEngine
engineProvider
()
{
if
(
mEngine
==
null
)
{
FlutterMain
.
startInitialization
(
mPlatform
.
getApplication
());
FlutterShellArgs
flutterShellArgs
=
new
FlutterShellArgs
(
new
String
[
0
]);
FlutterMain
.
ensureInitializationComplete
(
mPlatform
.
getApplication
().
getApplicationContext
(),
flutterShellArgs
.
toArray
());
mEngine
=
new
FlutterEngine
(
mPlatform
.
getApplication
().
getApplicationContext
());
}
return
mEngine
;
}
public
void
boostDestroy
(){
if
(
mEngine
!=
null
){
mEngine
.
destroy
();
}
mEngine
=
null
;
mRegistry
=
null
;
mCurrentActiveActivity
=
null
;
}
}
android/src/main/java/com/idlefish/flutterboost/Platform.java
View file @
c1c82460
...
...
@@ -8,21 +8,16 @@ import java.lang.reflect.Method;
import
java.util.Map
;
import
io.flutter.embedding.android.FlutterView
;
import
io.flutter.embedding.engine.FlutterEngine
;
import
io.flutter.embedding.engine.FlutterShellArgs
;
import
io.flutter.plugin.common.PluginRegistry
;
import
io.flutter.view.FlutterMain
;
public
abstract
class
Platform
{
private
FlutterEngine
mEngine
;
public
abstract
Application
getApplication
();
public
abstract
void
openContainer
(
Context
context
,
String
url
,
Map
<
String
,
Object
>
urlParams
,
int
requestCode
,
Map
<
String
,
Object
>
exts
);
public
abstract
int
whenEngineStart
();
public
abstract
int
whenEngineDestroy
();
public
abstract
FlutterView
.
RenderMode
renderMode
();
...
...
@@ -37,26 +32,6 @@ public abstract class Platform {
record
.
getContainer
().
finishContainer
(
result
);
}
public
FlutterEngine
engineProvider
()
{
if
(
mEngine
==
null
)
{
FlutterMain
.
startInitialization
(
getApplication
());
FlutterShellArgs
flutterShellArgs
=
new
FlutterShellArgs
(
new
String
[
0
]);
FlutterMain
.
ensureInitializationComplete
(
getApplication
().
getApplicationContext
(),
flutterShellArgs
.
toArray
());
mEngine
=
new
FlutterEngine
(
getApplication
().
getApplicationContext
());
}
return
mEngine
;
}
public
FlutterEngine
getEngine
()
{
return
mEngine
;
}
public
void
registerPlugins
(
PluginRegistry
registry
)
{
try
{
...
...
android/src/main/java/com/idlefish/flutterboost/containers/FlutterActivityAndFragmentDelegate.java
View file @
c1c82460
...
...
@@ -77,8 +77,9 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
void
onAttach
(
@NonNull
Context
context
)
{
ensureAlive
();
initializeFlutter
(
context
);
if
(
NewFlutterBoost
.
instance
().
platform
().
whenEngineStart
()
==
NewFlutterBoost
.
ConfigBuilder
.
FLUTTER_ACTIVITY_CREATED
)
{
NewFlutterBoost
.
instance
().
doInitialFlutter
();
}
// When "retain instance" is true, the FlutterEngine will survive configuration
// changes. Therefore, we create a new one only if one does not already exist.
...
...
@@ -116,27 +117,12 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
host
.
configureFlutterEngine
(
flutterEngine
);
}
private
void
initializeFlutter
(
@NonNull
Context
context
)
{
FlutterMain
.
ensureInitializationComplete
(
context
.
getApplicationContext
(),
host
.
getFlutterShellArgs
().
toArray
()
);
}
private
void
setupFlutterEngine
()
{
Log
.
d
(
TAG
,
"Setting up FlutterEngine."
);
// First, check if the host wants to use a cached FlutterEngine.
// String cachedEngineId = host.getCachedEngineId();
// if (cachedEngineId != null) {
// flutterEngine = FlutterEngineCache.getInstance().get(cachedEngineId);
// isFlutterEngineFromHost = true;
// if (flutterEngine == null) {
// throw new IllegalStateException("The requested cached FlutterEngine did not exist in the FlutterEngineCache: '" + cachedEngineId + "'");
// }
// return;
// }
// Second, defer to subclasses for a custom FlutterEngine.
flutterEngine
=
host
.
provideFlutterEngine
(
host
.
getContext
());
...
...
@@ -264,16 +250,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
Utils
.
fixInputMethodManagerLeak
(
host
.
getActivity
());
// Destroy our FlutterEngine if we're not set to retain it.
// if (host.shouldDestroyEngineWithHost()) {
// flutterEngine.destroy();
//
// if (host.getCachedEngineId() != null) {
// FlutterEngineCache.getInstance().remove(host.getCachedEngineId());
// }
//
// flutterEngine = null;
// }
}
...
...
@@ -281,12 +257,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
mSyncer
.
onBackPressed
();
ensureAlive
();
// if (flutterEngine != null) {
// Log.v(TAG, "Forwarding onBackPressed() to FlutterEngine.");
// flutterEngine.getNavigationChannel().popRoute();
// } else {
// Log.w(TAG, "Invoked onBackPressed() before NewFlutterFragment was attached to an Activity.");
// }
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment