启动方式
startActivity(
FlutterActivity
.withNewEngine()
.initialRoute(“/my_route”)
.build(currentActivity)
);
2.3 路由启动示例
flutter/lib/main.dart
默认路由
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: ‘Flutter Demo’,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: ‘Flutter Demo Home Page’),
);
}
}
添加路由页面
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: ‘Flutter Demo’,
theme: ThemeData(
primarySwatch: Colors.blue,
),
routes: <String,WidgetBuilder>{
“/”:(context)=>MyHomePage(title: ‘Flutter Demo Home Page’),
‘/a’:(context)=> MyPage(title:‘Page A’),
‘/b’:(context)=> MyPage(title:‘Page B’)
},
//home: MyHomePage(title: ‘Flutter Demo Home Page’),
);
}
}
class MyPage extends StatelessWidget{
var title;
MyPage({Key? key, required this.title}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(title),),
body: Center(child: Text(title),)
);
}
}
设置启动
startActivity(FlutterActivity
.withNewEngine()
.initialRoute(“/a”)
.build(this)
)
效果图
3.1 默认启动方式
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(
FlutterActivity.createDefaultIntent(currentActivity)
);
}
});
2.3 缺点
-
启动Flutter模块时,会有明显延迟
-
会有一段时间的白屏
四 使用缓存的FlutterEngine启动FlutterActivity
4.1 说明
-
默认情况下,每个FlutterActivity都会创建自己的FlutterEngine
-
每个FlutterEngine都有预热时间,这意味着在FlutterActivity在可视之前,都会有延迟
-
为了减少延迟,在创建FlutterActivity之前,预先创建FlutterEngine,然后使用预先创建的FlutterEngine
-
要预先创建FlutterEngine,可以在应用程序中找到一个合适的位置来实例化FlutterEngine,一般在Application中完成
4.2 创建FlutterEngine(Application中)
public class MyApplication extends Application {
public FlutterEngine flutterEngine;
@Override
public void onCreate() {
super.onCreate();
// Instantiate a FlutterEngine.
flutterEngine = new FlutterEngine(this);
// Start executing Dart code to pre-warm the FlutterEngine.
flutterEngine.getDartExecutor().executeDartEntrypoint(
DartEntrypoint.createDefault()
);
// Cache the FlutterEngine to be used by FlutterActivity.
FlutterEngineCache
.getInstance()
.put(“my_engine_id”, flutterEngine);
}
}
说明:
-
my_engine_id:是个ID标识
-
请确保传递到FlutterActivity或FlutterFragment的ID跟通过FlutterEngine创建的是同一个
4.3 Activity页面中使用FlutterEngine
startActivity(
FlutterActivity
.withCachedEngine(“my_engine_id”)
.build(this)
);
说明:
- withCachedEngine(“my_engine_id”)跟Application中定义的my_engine_id是同一个
4.4 效果图
最后
这里我特地整理了一份《Android开发核心知识点笔记》,里面就包含了自定义View相关的内容
除了这份笔记,还给大家分享 Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。
分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~
喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
14817500987)]
除了这份笔记,还给大家分享 Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。
[外链图片转存中…(img-4vHg5GJj-1714817500988)]
分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~
喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!