当前位置: 首页 > news >正文

Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决

背景

书接上回:





Android flutter项目 启动优化实战(一)使用benchmark分析项目

已经分析出了问题:

1.缩短总时长(解决黑屏问题、懒启动、优化流程)、2.优化启动项(使用App Startup)、3.提升用户体验

1.使用App Startup  

      App Startup库提供了一种在应用启动时初始化组件的简单而高效的方法。库开发者和应用开发者都可以使用应用启动来简化启动序列,并明确设置初始化顺序。

       通过应用启动,您可以定义共用单个 Content Provider 的组件初始化程序,而无需为需要初始化的每个组件定义单独的 Content Provider。这可以显著缩短应用启动时间。

引入

    implementation "androidx.startup:startup-runtime:1.1.1"

 

使用方法

通过提供 若干需要初始化的组件构成的Initializer 给App Startup 

以timber为例子🌰:

class TimberInitializer : Initializer<String> {//create() 方法,其中包含初始化组件并返回 T 实例的所有必要操作。override fun create(context: Context): String {Timber.plant(Timber.DebugTree())return "TimberInit"}
//dependencies() 方法,该方法返回初始化程序所依赖的其他 Initializer<T> 对象的列表。您可以使用此方法控制应用在启动时的顺序。override fun dependencies(): List<Class<out Initializer<*>>> {// No dependencies on other libraries.return emptyList()}
}

生成若干的Initializer

然后在清单配置:   

   其中 tools:node="remove"  代表取消初始化

     <application>   <providerandroid:name="androidx.startup.InitializationProvider"android:authorities="${applicationId}.androidx-startup"android:exported="false"tools:node="merge"><meta-dataandroid:name="com.app.test.init.FlutterBoostInitializer"android:value="androidx.startup" /><meta-dataandroid:name="com.app.test.init.XGPushInitializer"android:value="androidx.startup"tools:node="remove" /><!--根据隐私政策 延后初始化--><meta-dataandroid:name="com.app.test.init.InstaInitializer"android:value="androidx.startup"/></provider></application>

手动初始化

根据业务场景某些Initializer可以延后手动初始化

AppInitializer.getInstance(context).initializeComponent(ExampleLoggerInitializer::class.java)

效果检查

使上一章的方式使用benchmark分析项目检查结果

可以自己查看相关Initializer的相关效果 

可以清晰看到app startup在bindApplication的中 进行了相关初始化 

注意事项:

  • InitializationProvider 的 onCreate() 方法是在主线程被调用的,这对于某些初始化时间过长,需要运行在子线程的组件来说就不太适用了。

  • 跟声明顺序无关 若有依赖项目 需要放入dependencies方法里

  • 由于 Startup 内部会缓存 Initializer 的初始化结果值,所以重复调用 initializeComponent方法不会导致多次初始化,手动初始化该方法也可用于自动初始化时获取初始化结果值

2.优化基于flutterboost的flutter首页

问题描述

使用 flutter boost  和其它第三方组件 都进行初始化时  debug偶现 release几乎必现 启动黑屏

解决方案

当时的解决方法是

修改flutterboost源码中启动部分并加以500ms的延迟

新版解决方案

处理appBuilder

具体参考 flutter boost 启动白屏踩坑_flutter release

并顺手将flutter main方法进行了优化 在runApp()方法前面的 await LocalNotification.init();等方法懒加载

本阶段总结

start up点击进去能看到具体的详情 

优化前后对比

0.0v1.0v

如果仅max值从打开来看 优化了50%(毕竟如果第一次启动时间特别长 用户印象会很深)

总体效果还是不错的 

相关文章:

Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决

背景 书接上回&#xff1a; Android flutter项目 启动优化实战&#xff08;一&#xff09;使用benchmark分析项目 已经分析出了问题: 1.缩短总时长&#xff08;解决黑屏问题、懒启动、优化流程&#xff09;、2.优化启动项&#xff08;使用App Startup&#xff09;、3.提升用…...

Java---权限修饰符、final、static

文章目录 1. 权限修饰符2. final(最终态)3. static(静态) 1. 权限修饰符 修饰符同一个类中同一个包中的子类和无关类不同包的子类不同包的无关类private√默认√√protected√√√public√√√√ 2. final(最终态) 1. final关键字是最终的意思&#xff0c;可以修饰成员方法、…...

unity实时保存对象的位姿,重新运行程序时用最后保存的数据给物体赋值

using UnityEngine; using System.IO; // using System.Xml.Serialization; public class SaveCoordinates : MonoBehaviour {public GameObject MainObject;//读取坐标private float x;private float y;private float z;private Quaternion quaternion;private void Start(){/…...

【Java Spring】Spring MVC基础

文章目录 1、Spring MVC 简介2、Spring MVC 功能1.1 Spring MVC 连接功能2.2 Spring MVC 获取参数2.2.1 获取变量2.2.2 获取对象2.2.3 RequestParam重命名后端参数2.2.4 RequestBody 接收Json对象2.2.5 PathVariable从URL中获取参数 1、Spring MVC 简介 Spring Web MVC是构建于…...

MES系统的功能清单

MES系统的功能清单 一、生产计划管理 1. 订单和生产计划制定&#xff1a;根据客户需求和市场状况&#xff0c;制定生产计划和订单&#xff0c;确保生产资源的合理分配和生产进度的有效管理。 2. 生产排程&#xff1a;根据生产计划和订单&#xff0c;结合设备、人员、物料等资…...

docker 安装elasticsearch集群

准备工作 docker 安装好&#xff0c;docker compose 安装好编辑好docker-compose.yml文件&#xff08;本文会提供&#xff09;生成elastic-certificates.p12密钥&#xff0c;与docker-compose文件在同一个目录&#xff08;本文会介绍生成方式&#xff09;准备elasticsearch配置…...

Spring Boot 3 + Spring Security 6 最新版本修改 Json 登录后 RememberMe 功能问题失效的解决方案

当 Spring Boot 版本更新到 3 之后&#xff0c;最低要求的 JDK 版本变为 17&#xff0c;相应的 最新版本的 Spring Security 的配置也发生了变化&#xff0c;一下主要讲解一些新的 Spring Security 的配置方法 1. 配置由继承WebSeucrityConfigurerAdapter变成只需添加一个Secur…...

Java核心知识点整理大全21-笔记

目录 18.1.5.1. upstream_module 和健康检测 18.1.5.1. proxy_pass 请求转发 18.1.6. HAProxy 19. 数据库 19.1.1. 存储引擎 19.1.1.1. 概念 19.1.1.2. InnoDB&#xff08;B树&#xff09; 适用场景&#xff1a; 19.1.1.3. TokuDB&#xff08;Fractal Tree-节点带数据&…...

Redis深入理解-主从架构下内核数据结构、主从同步以及主节点选举

Redis 主从挂载后的内核数据结构分析 主节点中&#xff0c;会通过 clusteNode 中的 slaves 来记录该主节点包含了哪些从节点&#xff0c;这个 slaves 是一个指向 *clusterNode[] 数组的数据结构从节点中&#xff0c;会通过 clusterNode 中的 slaveof 来记录该从节点属于哪个主…...

java中BigDecimal的介绍及使用(二)

系列文章目录 java中BigDecimal的介绍及使用&#xff0c;BigDecimal格式化&#xff0c;BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…...

NX二次开发UF_MTX3_identity 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX3_identity Defined in: uf_mtx.h void UF_MTX3_identity(double identity_mtx [ 9 ] ) overview 概述 Returns a 3 x 3 identity matrix. 返回一个3 x 3的单位矩阵。 UFUN…...

解决Hadoop DataNode ‘Incompatible clusterIDs‘报错

问题 启动hadoop时报错Failed to add storage directory 2023-11-26 12:02:06,840 WARN common.Storage: Failed to add storage directory [DISK]file:xxx java.io.IOException: Incompatible clusterIDs in xxx/dfs/data: namenode clusterID CID-xxxxxx; datanode cluste…...

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(系统概述与环境搭建)

计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现&#xff08;系统概述与环境搭建&#xff09; 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先&#xff0c;通过深入分析项目所需数据&#xff0c;包括用户、商品、商品类别、收藏、订单…...

神器!使用 patchworklib 库进行多图排版真棒啊

如果想把多个图合并放在一个图里&#xff0c;如图&#xff0c;该如何实现 好在R语言 和 Python 都有对应的解决方案&#xff0c; 分别是patchwork包和patchworklib库。 推介1 我们打造了《100个超强算法模型》&#xff0c;特点&#xff1a;从0到1轻松学习&#xff0c;原理、…...

MySQL -DDL 及表类型

DDL 创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:[DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1.CHARACTER SET&#xff1a…...

主从同步机制

RocketMQ的Broker分为Master和Slave两个角色&#xff0c;为了保证高可用性&#xff0c;Master角色的机器接收到消息后&#xff0c;要把内容同步到Slave机器上&#xff0c;这样一旦Master宕机&#xff0c;Slave机器依然可以提供服务。下面分析Master和Slave角色机器间同步功能实…...

Leetcode算法系列| 3. 无重复字符的最长子串

目录 1.题目2.题解C# 解法一&#xff1a;滑动窗口算法C# 解法二&#xff1a;索引寻找Java 解法一&#xff1a;滑动窗口算法Java 解法二&#xff1a;遍历字符串 1.题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例1: 输入: s "ab…...

Spring Cache(缓存框架)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…...

android开发:安卓13Wifi和热点查看与设置功能

近日对安卓热点功能做了一些技术验证&#xff0c;目的是想利用手机开热点给设备做初始化&#xff0c;用的是安卓13&#xff0c;简言之&#xff1a; 热点设置功能不可用&#xff0c;不可设置SSID和密码&#xff0c;不可程序控制开启关闭&#xff0c;网上的代码统统都过时了Loca…...

Java中的mysql——面试题+答案——第24期

当涉及MySQL时&#xff0c;面试题可以涵盖更多高级主题、安全性和实践经验。 MySQL中的存储引擎InnoDB和MyISAM的区别是什么&#xff1f; 答案&#xff1a; InnoDB支持事务&#xff0c;而MyISAM不支持。InnoDB使用行级锁&#xff0c;而MyISAM使用表级锁。InnoDB支持外键&#x…...

从Kubernetes到KubeLLM:AI原生栈告警体系迁移实录(含TensorRT-LLM GPU显存泄漏自动定位脚本)

第一章&#xff1a;AI原生软件研发监控告警体系搭建 2026奇点智能技术大会(https://ml-summit.org) AI原生软件具备动态推理路径、模型权重热更新、多模态输入响应等特性&#xff0c;传统基于静态服务拓扑的监控体系难以捕获其运行时语义异常。构建面向AI原生应用的监控告警体…...

基于Simulink的2ASK调制解调系统建模与性能对比分析

1. 2ASK调制解调系统基础入门 第一次接触通信系统仿真时&#xff0c;我被各种调制方式搞得头晕眼花。直到用Simulink搭建了第一个2ASK模型&#xff0c;才发现原来通信原理可以这么直观。**2ASK&#xff08;二进制幅移键控&#xff09;**是最基础的数字调制方式之一&#xff0c;…...

Switch第三方控制器终极指南:用sys-con解锁全平台手柄支持 [特殊字符]

Switch第三方控制器终极指南&#xff1a;用sys-con解锁全平台手柄支持 &#x1f3ae; 【免费下载链接】sys-con Nintendo Switch sysmodule that allows support for third-party controllers 项目地址: https://gitcode.com/gh_mirrors/sy/sys-con 还在为Switch官方手柄…...

用Python+海康MV-CH120-60UM相机实现条形码识别,从硬件连接到代码调试的完整避坑指南

Python海康MV-CH120-60UM工业相机条形码识别实战&#xff1a;从硬件配置到智能解码的完整解决方案 工业视觉领域的开发者们常常面临一个现实问题&#xff1a;如何快速将硬件设备与软件系统无缝对接&#xff1f;本文将以海康威视MV-CH120-60UM工业相机为例&#xff0c;手把手带你…...

4步快速上手:用APK-Installer在Windows上轻松安装安卓应用,告别模拟器烦恼

4步快速上手&#xff1a;用APK-Installer在Windows上轻松安装安卓应用&#xff0c;告别模拟器烦恼 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为在Windows电脑…...

Llama-3.2V-11B-cot部署案例:Docker镜像免配置运行图文推理API服务

Llama-3.2V-11B-cot部署案例&#xff1a;Docker镜像免配置运行图文推理API服务 想体验一个能看懂图片、还能像人一样一步步思考的AI吗&#xff1f;今天要介绍的 Llama-3.2V-11B-cot 就是这样一个模型。它不仅能识别图片里的内容&#xff0c;还能把思考过程一步步拆解给你看&am…...

探索League Akari:基于LCU API的模块化英雄联盟客户端工具集

探索League Akari&#xff1a;基于LCU API的模块化英雄联盟客户端工具集 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一个基…...

如何用paraphrase-multilingual-MiniLM-L12-v2在90天内降低多语言内容处理成本60%

如何用paraphrase-multilingual-MiniLM-L12-v2在90天内降低多语言内容处理成本60% 【免费下载链接】paraphrase-multilingual-MiniLM-L12-v2 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/paraphrase-multilingual-MiniLM-L12-v2 paraphrase-multilingual-…...

南航学位论文LaTeX模板:3分钟快速上手专业排版

南航学位论文LaTeX模板&#xff1a;3分钟快速上手专业排版 【免费下载链接】nuaathesis LaTeX document class for NUAA, supporting bachelor/master/PH.D thesis in Chinese/English/Japanese. 南航本科、硕士、博士学位论文 LaTeX 模板 项目地址: https://gitcode.com/gh_…...

Phi-3-mini-128k-instruct代码生成效果展示:自动补全Python与JavaScript函数

Phi-3-mini-128k-instruct代码生成效果展示&#xff1a;自动补全Python与JavaScript函数 最近在尝试各种代码生成模型&#xff0c;想找一个既轻量又聪明的编程助手。试了一圈&#xff0c;微软开源的Phi-3-mini-128k-instruct让我有点惊喜。它模型不大&#xff0c;但在理解编程…...