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

Android TV跨平台开发心得

这半年来陆陆续续做了一堆poc,刚开始是flutter,结果领导叫停了,说有其他部门做一样的事,真不巧;后来是react native,开发了个demo,上报上去了已经;现在又要做android native+webview PWA,也做的差不多了。一直忙到现在,终于喘口气。前两天领导让我出一个flutter培训,惊奇的发现,才放下不久的flutter已经忘的差不多了,估计react native也快了,再不总结一下,半年就白干了

纯主观感受,没有一点客观

Flutter最大的一个特点就是它的skia引擎,让给我的感觉就像一块画布,skia在上面画,这个画布不管铺到ios,安卓,还是什么其他的(据说还能用来开发桌面端和web,真的有人这么干吗),都是一样的,带来相同的体验

React Native的是用的原生的组件,不过我觉得吧,一个view,你width height设置好了,bgcolor shadow全填了,那还能显示的不一样?不过确实,针对不同平台不同写法的情况是有的,比如<video>,react-native-video,一堆选项ios专用,这就是由于底层安卓用的是exoplayer,ios用的avplayer,exoplayer和avplayer的feature不同导致的。但是这个,flutter的video就没有吗,也不见得吧,flutter 也是 embad 到这俩player的

然后flutter还有一个,就是它的引擎,巨大无比,装在apk包里,apk包巨大,装在tpk包里,tpk包巨大。这个其实要是装app还好,装得上去就行,但如果是想做web页面,这个首屏加载速度简直感人,给大家放一个flutter demo感受一下:
https://flutter.github.io/samples/web/material_3_demo/

所以我觉得总体上Flutter好像相对React Native没看出什么特别的优势,而且它是dart写的,很多人一看到dart就害怕了,要新学,就算了

dart其实不难,有点像java,就是很面向对象,还有关键字啥的。反正我当时学会了StatelessWidget和StatefulWidget就上手写了,不会的现查,也写的挺顺利的

倒是开发react native,js,老本行啊,我当时可有信心了,感觉这不是容易的很,但是,奉劝大家,手里已经有一个写好的react项目的,千万不要觉得迁移到react native非常方便!一点都不方便!不止是div要换成View的问题,webapp用的那些包,什么sass,className,都要找react native版本的替代,能替代的,配置配一个下午,替代不了的,等着重写吧,比如关于页面跳转的,web和android app的逻辑都不一样,只能用react navigator重写

还有样式,没想到样式表从scss拉过来放到js里面这么长,这怎么不算一种css-in-js呢(x),甚至还不支持嵌套!这一个从json create的StyleSheet,不支持这个json嵌套!还有那个动画,只能说幸好我写过flutter,有一点底子,要不然直接从css动画过渡过去,肯定满脸懵

可能是开发用的电视棒的比较低端,同样的代码,在webapp里很快,开发react的时候也很少useMemo啥的,react native可好了,响应速度感人,没做优化前四五百毫秒都是有的,优化后200ms以内,喜欢顺手写onFocus={() => {setFocus(true); focusCb();}}的人有难了,必须提出来用useCallback包一下,要不然这个cb对象会重新生成,它生成不要紧,下面的所有自元素接到命令都要重新生成。。。

其他的下次再写吧,该下班了

相关文章:

Android TV跨平台开发心得

这半年来陆陆续续做了一堆poc&#xff0c;刚开始是flutter&#xff0c;结果领导叫停了&#xff0c;说有其他部门做一样的事&#xff0c;真不巧&#xff1b;后来是react native&#xff0c;开发了个demo&#xff0c;上报上去了已经&#xff1b;现在又要做android nativewebview …...

View->裁剪框View的绘制,手势处理

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android…...

语言模型的进化:从NLP到LLM的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是一个充满挑战和机遇的领域。随着技术的发展&#xff0c;我们见证了从传统规则到统计机器学习&#xff0c;再到深度学习和预训练模型的演进。如今&#xff0c;我们站在了大型语言模型&#xff…...

应急响应--网站(web)入侵篡改指南

免责声明:本文... 目录 被入侵常见现象: 首要任务&#xff1a; 分析思路&#xff1a; 演示案例: IIS&.NET-注入-基于时间配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后门配合日志分析 (推荐) Webshell 查杀-常规后门&…...

vue3+vue-router+vite 实现动态路由

文章中出现的代码是演示版本&#xff0c;仅供参考&#xff0c;实际的业务需求会更加复杂 什么是动态路由 什么场景会用到动态路由 举一个最常见的例子&#xff0c;比如说我们要开发一个后台管理系统&#xff0c;一般来说后台管理系统都会分角色登录&#xff0c;这个时候也就涉…...

Okhttp hostnameVerifier详解

hostnameVerifier 方法简介核心原理参考资料 方法简介 本篇博文以Okhttp 4.6.0来解析hostnameVerfier的作用&#xff0c;顾名思义&#xff0c;该方法的主要作用就是鉴定hostnname的合法性。Okhttp在初始化的时候我们可以自己配置hostnameVerfier&#xff1a; new OkHttpClien…...

TCP的p2p网络模式

TCP的p2p网络模式 1、tcp连接的状态有以下11种 CLOSED&#xff1a;关闭状态LISTEN&#xff1a;服务端状态&#xff0c;等待客户端发起连接请求SYN_SENT&#xff1a;客户端已发送同步连接请求&#xff0c;等待服务端相应SYN_RECEIVED&#xff1a;服务器收到客户端的SYN请请求&…...

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或…...

动手学深度学习6.2 图像卷积-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;卷积层_哔哩哔哩_bilibili 代码_哔哩哔哩_bilibili 本节教材地址&#xff1a;6.2. 图像卷积 — 动…...

展开说说:Android服务之bindService解析

前面两篇文章我们分别总结了Android四种Service的基本使用以及源码层面总结一下startService的执行过程&#xff0c;本篇继续从源码层面总结bindService的执行过程。 本文依然按着是什么&#xff1f;有什么&#xff1f;怎么用&#xff1f;啥原理&#xff1f;的步骤来分析。 b…...

node-sass 老版本4.14.0 安装失败解决办法

旧项目 npm install 发现 node-sass 安装 失败 切换淘宝镜像之后 不能完全解决问题。因为需要编译&#xff0c;本地没有Python环境不能实现 安装node-sass时&#xff0c;在install阶段会从Github上下载一个叫binding.node的文件&#xff0c;而「GitHub Releases」里的文件…...

最近很火的字幕截图生成器

网址 https://disksing.com/fake-screenshot/ 最近很火的字幕截图生成器&#xff0c;对于自媒体来说真的太实用了 另外透露一下&#xff0c;你仔细研究就会发现&#xff0c;这是个纯前端的项目...

使用RabbitMQ实现可靠的消息传递机制

使用RabbitMQ实现可靠的消息传递机制 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. RabbitMQ简介 RabbitMQ是一个开源的消息代理软件&#xff0c;实现了高级消息队列协议&#xff08;AMQP&…...

Function Call ReACT,Agent应用落地的加速器_qwen的function calling和react有什么不同

探索智能体Agent的未来之路&#xff1a;Function Call与ReACT框架的较量&#xff0c;谁能引领未来&#xff1f; 引言 各大平台出现智能体应用创建&#xff0c;智能体逐渐落地&#xff0c;背后的使用哪种框架&#xff1f; 随着各大平台&#xff0c;例如百度千帆APPbuilder、阿…...

Java的JSONPath(fastjson)使用总结

背景 最近使用json实现复杂业务配置, 因为功能需要解析读取json的中节点数据。如果使用循环或者stream处理&#xff0c;可以实现&#xff0c;但是都过于麻烦。在想能否使用更简单json读取方式&#xff0c;正好发现fastjson支持该功能&#xff0c;本文做一个记录 案例说明 示…...

【大模型】大语言模型:光鲜背后的阴影——事实准确性和推理能力的挑战

大语言模型&#xff1a;光鲜背后的阴影——事实准确性和推理能力的挑战 引言一、概念界定二、事实准确性的局限2.1 训练数据的偏差2.2 知识的时效性问题2.3 复杂概念的理解与表述 三、推理能力的局限3.1 表层理解与深层逻辑的脱节3.2 缺乏常识推理3.3 无法进行长期记忆和连续推…...

Java面向对象练习(1.手机类)(2024.7.4)

手机类 package Phone;public class Phone {private String brand;private int price;private String color;public Phone(){}public Phone(String brand, int price, String color){this.brand brand;this.price price;this.color color;}public void setBrand(String bra…...

智慧生活新篇章,Vatee万腾平台领航前行

在21世纪的科技浪潮中&#xff0c;智慧生活已不再是一个遥远的梦想&#xff0c;而是正逐步成为我们日常生活的现实。从智能家居的温馨便捷&#xff0c;到智慧城市的高效运转&#xff0c;科技的每一次进步都在为我们的生活增添新的色彩。而在这场智慧生活的变革中&#xff0c;Va…...

Spring Cloud Gateway报sun.misc.Unsafe.park(Native Method)

项目引入spring cloud gateway的jar报&#xff0c;启动的时候报&#xff1a; [2024-07-05 10:10:16.162][main][ERROR][org.springframework.boot.web.embedded.tomcat.TomcatStarter][61]:Error starting Tomcat context. Exception: org.springframework.beans.factory.Bean…...

select single , select endselect

select single , select endselect single 根据条件找到一条数据&#xff0c;就出来了。 select endselect是在里面循环&#xff0c;每次找一条&#xff0c;依次放到into table中&#xff0c;或者放到into work area中&#xff0c;下面append table 。 实际开发中不建议这么操…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...