跨平台UI渲染引擎方案对比
1、第一类 WebView 跨平台技术第一代跨平台技术主要以 Webview 容器,代表有 PhoneGap/Cordova 。优点:功能丰富,标准强,历史悠久,有强大的前端生态支持;是目前最成功的跨平台渲染容器。支付宝及微信更是以此为载体,打造小程序内核。第一代渲染引擎主要缺点在于性能方面及高级组件方面,流畅性始终与 Native 无法媲美。
为何会这样,我们以 Blink 为例从三个方面来看此原因。
1.1 WebView 的基础架构及线程模型
Android 平台 WebView 采用多进程架构,主要分为 Browser 进程, Render 进程和 GPU 进程。 Browser 进程负责用户输入, Touch 事件处理、平台相关的对接等功能。 Render 进程 Main Thread 负责 JS 的执行, CSS 解析, Layout Paint ,输出 DisplayList 供 CC 使用。 Work Threads 进行图片的编解码。 Compositor Threads 负责 Layer 的合成,和 Tile 分片;将分片输出成 Bitmap 或者 GL ...
Jetpack架构组件:LiveData
LiveData的定义LiveData是一个可观察数据的持有者, 但是不像普通的可观察数据, LiveData绑定了生命周期,例如Activity, Fragment的生命周期。有点抽象, 还是先了解一下关键的类。
1234567891011121314151617181920212223242526//Observer是一个接口,观察者。当数据改变时就回调onChangedpublic interface Observer<T> { void onChanged(@Nullable T t);}//LiveData类是个抽象类,这里先看看有什么暴露出去的方法public abstract class LiveData<T> { //添加观察者观察, 传入LifecycleOwner,用于来绑定生命周期 public void observe(LifecycleOwner owner, Observer<T> observer) //添加观察者观察, 但是是没有LifecycleOwner ...
Flutter状态管理
Flutter 中的状态管理是一个热门话题。为了选择适合需求的解决方案,实际上要做的第一件事就是明确这些需求,并设定一些目标。基于自身需求,我确定了这些:
在不牺牲代码质量的情况下实现稳定的开发速度
将展示逻辑与业务逻辑分开
便于理解;结构层次明确。
具备普适性,满足绝大部分场景
考虑到这些限制,我们将探索以下选项:
使用 setState() 和 StatefulWidgets。
ScopedModel 范围模型
BLoC (Business Logic Component)
Redux
了解局部状态和全局状态之间的差异在深入探讨各种状态管理方案之前,理解什么是本地状态和全局状态将有助于我们更好地做出选择。为此,让我们来看一个实际例子:
为了更好地理解,让我们看一个实际例子:想象一个简单的登录表单,用户可以在其中输入用户名和密码,如果数据匹配,则从后端获取 “用户” 对象。在这个例子中,任何类型的登录表单验证都可以被视为局部状态,因为这些规则的范围只适用于这个组件,而我们应用程序的其他部分并不需要知道它。然而,从后端获得的 “用户” 对象可以被视为我们全局状态的一部分,因 ...
Jetpack架构组件:ViewModel
ViewModel的定义根据Android官方文档,ViewModel旨在以生命周期可感知的方式存储和管理与UI相关的数据。它允许数据在屏幕旋转等配置更改中保留。
ViewModel总是与作用域(一个Fragment或一个Activity)关联创建,并将保留直到其关联的Activity或Fragment永久处置,这意味着视图数据可以在Fragment/Activity由于旋转而重新创建等事件中被保留下来。 ViewModel的主要职责包括:
为Activity或Fragment准备和管理数据。
在配置更改期间保留数据,例如旋转。
处理Activity/Fragment与程序其余部分的通信(例如调用业务逻辑类)。
ViewModel将视图数据和逻辑的所有权与像Activities和Fragments这样与生命周期绑定的实体分离开来。ViewModel不仅消除了常见的生命周期问题,还有助于构建更模块化且更易于测试的UI。 Activity或Fragment可以通过LiveData或Android Data Binding观察ViewModel中的更改。 注意:Vi ...
Jetpack架构组件:LifeCycle
LifeCycle 组件与 Android 组件(如 Activity 或 Fragment)的生命周期事件相关,它包含三个主要的类:
LifeCycle(生命周期)
LifeCycleOwner(生命周期所有者)
LifeCycleObserver(生命周期观察者)
LifeCycle一个 LifeCycle 对象可以获取与 LifeCycleOwner(通常是 Activity 或 Fragment)当前生命周期相关的信息。
LifeCycle 对象提供了关于所有者生命周期的信息,以事件和状态的形式。
事件是与生命周期所有者事件相关的,如 onCreate()、onStart()、onStop() 等。
从上面的时间线图中,我们注意到事件 ON_CREATE、ON_START 和 ON_RESUME 在相应的 Activity(LifeCycleOwner)的 onCreate()、onStart() 和 onResume() 返回后立即分派。
另外,我们还注意到有一个特殊的事件:ON_ANY,它匹配所有的生命周期所有者事件。
状态如文档所述:
生命周期状态。你可以将状态视为 ...
RecyclerView性能优化指南
数据处理与视图绑定分离RecyclerView的bindViewHolder方法是在UI线程进行的,如果在该方法进行耗时操作,将会影响滑动的流畅性。
优化前:
1234567891011121314151617181920212223242526class Task { Date dateDue; String title; String description; // getters and setters here}class MyRecyclerView.Adapter extends RecyclerView.Adapter { static final TODAYS_DATE = new Date(); static final DATE_FORMAT = new SimpleDateFormat("MM dd, yyyy"); public onBindViewHolder(Task.ViewHolder tvh, int position) { Task t ...
初识Flutter
在2017年,Google在Google IO开发者大会上公开发布了早期版本的跨平台移动应用技术Flutter。快进到今年的大会,官宣Flutter已经准备好投入生产环境,在九月底发布了Release Preview 2。这是其中一些亮点:
这个最新版本的主题是完美的iOS应用程序(之前主要关注Android的Material Design)。
减少应用程序的包大小,现在一个最小的Android应用程序在发布模式下只有4.7MB。
Flutter自从开源以来,一直是GitHub上活跃排名前50的仓库之一。
大厂正在使用它,比如阿里(Android,iOS)、腾讯(Android,iOS)和Google广告(Android,iOS)。还有一个关于阿里巴巴如何使用Flutter构建闲鱼应用程序(Android,iOS)的视频,目前在中国有超过5000万客户在使用。
这张图显示了Flutter在Stack Overflow上得到了很多关注。
Flutter是什么
Flutter是由Google开发的开源软件开发工具包(SDK),用于快速构建iOS和Android应用程序,并开源大部分 ...
Java Vs Kotlin
什么是 Kotlin?引用官方文档的说法,Kotlin 是一种开源的静态类型编程语言,目标是 JVM、Android、JavaScript 和 Native。它由 JetBrains 开发。它与 Java 完全兼容和可互操作。
Kotlin 应用场景?Kotlin 是一种可用于任何类型开发的编程语言——服务器端、客户端或 Web。
Kotlin 和 Java 的区别
特征
Java
Kotlin
异常检查
可用
不可用
代码简洁性
不能被标记为简洁
优于 Java
协程
不可用
可用
数据类
需要编写大量样板代码
只需在类定义中添加 data 关键字
扩展函数
不可用
可用
高阶函数和 Lambda
高阶函数是使用可调用项实现的,Lambda 表达式在 Java 8 中引入作为预构建功能之一出现
作为预先构建的功能之一
隐式扩展转换
可用
不可用
内联函数
不可用
可用
委托的原生支持
不可用
可用
非私有字段
可用
不可用
空指针异常
可用
不可用
原始类型
原始类型的变量不是对象
原始类型的变量是对象
智能转换
不可用
可用 ...
Android Things是否会成为物联网领域的重要参与者?【译】
随着越来越多的企业看到Android的增长潜力,他们也在越来越多地进行Android移动应用程序开发。Android希望通过发布新功能和更新,如Android Things,继续利用这种增长势头。曾经的Brillo现在成为了Android Things,而Android Things最终达到了1.0版本。谷歌宣布,其物联网设备平台已经从开发者预览版中毕业,这是在SDK(软件开发工具包)下载量超过10万次之后的这周。
我曾认为谷歌准备建立自己的智能家居中心,但现在似乎这种可能性非常小。为什么呢?因为Android Things非常适合这样做,但它适用于使用特定芯片和板卡的任何硬件制造商。例如,谷歌的Android Things现在支持NXP i.MX8M、Qualcomm SDA212、Qualcomm SDA624和MediaTek MT8516等。
而且,SDK允许设备制造商访问许多原生Android功能。这与谷歌的WiFi和Chromecast产品非常不同,后者没有大量的公共API。结果,谷歌实际上控制着这些设备。
但好消息是,谷歌正在推出一个统一的物联网平台,保证对Android ...
初识React Native
什么是React NativeReact Native 是一个用于编写真实、原生渲染的 iOS 和 Android 移动应用的 JavaScript 框架。它基于 React,Facebook 的 JavaScript 库用于构建用户界面,但与其针对浏览器不同,它针对移动平台。换句话说:Web 开发人员现在可以使用我们已经了解和喜爱的 JavaScript 库编写真正“原生”的移动应用,而不必离开 JavaScript 的舒适区域。而且,因为大多数代码可以在不同平台之间共享,React Native 让同时为 Android 和 iOS 进行开发变得非常容易。
与 React for the Web 类似,React Native 应用程序使用 JavaScript 和类似 XML 的标记(称为 JSX)编写。然后,在幕后,React Native “桥接器”调用 Objective-C(用于 iOS)或 Java(用于 Android)中的原生渲染 API。因此,你的应用程序将使用真正的移动 UI 组件进行渲染,而不是 Web 视图,并且看起来和感觉像任何其他移动应用程序一样。Rea ...





