首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

减少崩溃,提升体验 | 使用 Kotlin 打造优质应用

整体上看,Kotlin 的空安全特性帮助点评 Android 应用将空指针导致的崩溃从日均 3 个降低至 0。...2017 年,中国电信营业厅应用团队就开始使用 Kotlin,现在他们的新项目大约有 50% 的代码都是 Kotlin 编写。团队成功将空指针异常的出现概率 降低了 80% 之多。...在使是否可为 null 成为类型系统的一部分后,您不必再依赖内存和对代码库的了解,也不必依赖编译时警告 (如果用 @Nullable 注解字段/参数)。...由于是否可为 null 被强制执行,您将得到编译时错误,而不仅仅是警告。官方文档 介绍了处理是否可为 null 的方式。 避免常见问题 开发者会无意中引入一些问题,有些问题可能非常微妙且难以察觉。...立即使用 Kotlin,降低崩溃率,提高用户满意度,并保持较高的应用评分让您的用户留存和获取始终处于领先地位。

1.4K10

(译)Dart2.12版本发布,可靠的空安全,dart:ffi正式投入生产

2.可靠的空安全 自Dart 2.0引入可靠的空安全类型系统以来,空安全是Dart语言的最大补充。空安全性进一步增强了类型系统,使您能够捕获空错误,这是应用程序崩溃的常见原因。...3.默认情况下可为空:是对类型系统的基本的改变 空安全之前的核心挑战是,您无法分辨预期传递空值的代码与不能使用空值的代码之间的区别。...image 目前,使用dart create和flutter create不启用可靠的空安全创建的新程序包和应用程序。当我们看到大多数生态系统已经迁移时,我们希望在将来的稳定版本中对此进行更改。...当Dart分析您的代码并确定某个变量不可为空时,该变量始终为不可为空。Dart与Swift共享可靠的安全性,但其他编程语言却很少。...11.API变更 为了声明FFI稳定并支持上述功能,我们进行了一些较小的API更改。 现在禁止创建空结构(打破更改#44622),并产生弃用警告。您可以使用新的类型Opaque来表示空结构。

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 13 适配指南

    12L(API 级别 32)或更低版本为目标平台;当应用程序创建其第一个通知渠道时,系统将显示权限对话框; 如果是现有应用更新,程序的目标 API 级别为: 以 Android 13 (33)为目标平台...; 发送给你应用中的其他组件的 intent; 由系统发送的 intent; 由具有根级特权的用户发送的 intent; 更安全地导出上下文注册的接收器 为了帮助提高运行时接收器的安全性,Android...❝如果你想立即撤消权限,可以调用 exit()。但是进行 exit() 调用可能会导致当前正在访问 App 的其他应用出现崩溃。...前台服务 (FGS) 任务管理器 Android 13 的新前台服务( Foreground Services:FGS)任务管理器显示当前运行前台服务的应用程序列表,此列表称为活动应用程序,可以通过下拉通知抽屉并点击启示来访问...总结 TargetSDK 33 才会需要处理的变动: 相册权限 附近的WIFI设备权限 在后台使用身体传感器需要新的权限 intent 过滤器会屏蔽不匹配的 intent 更安全地导出上下文注册的接收器

    5.2K31

    Allsafe:包含安全漏洞的Android研究平台

    关于Allsafe Allsafe是一款包含大量安全漏洞的Android应用程序,跟其他包含漏洞的Android应用不同,Allsafe的设计更像是那些使用了大量现代库和新型技术的真实应用程序,而且Allsafe...4、任意代码执行 使用第三方应用安全地加载模块,并不是一件容易的事。你需要编写一个PoC应用,并成功利用该漏洞。...相关资源: 证书和公钥绑定 Coinbase漏洞 7、不安全的广播接收器 应用程序中有一个存在漏洞的广播接收器,你需要使用正确的数据来触发它。...相关资源: 内容提供器中的SQL注入漏洞 10、存在漏洞的WebView 你还可以在无需对应用程序进行反编译的情况下完成这个任务,弹出一个警告对话框并实现文件读取即可。...相关资源: Uber APK签名器 12、原生库 应用程序使用了一个原生库来验证用户输入的密码,你需要对代码库进行逆向分析,并找到密码,然后使用Frida来挂钩原生方法。

    88330

    Android Studio 3.2新功能特性

    如果您想立即开始使用AndroidX库,并且不需要转换现有的第三方库,则可以将android.useAndroidX标志设置 为true,并将 android.enableJetifier标志设置为false...Android应用程序包 Android App Bundle是一种新的上传格式,其中包含应用程序的所有已编译代码和资源,但会延迟APK生成并登录到Google Play商店。...能源分析器 Energy Profiler显示应用程序的估计能源使用情况的可视化。...在记录使用此API触发的CPU活动时,CPU分析器将调试API显示 为选定的CPU记录配置。...这意味着,如果您有使用V1编译的库依赖项,则可以将它们与使用Data Binding V2的项目一起使用。但是请注意,使用V1的项目无法使用通过V2编译的依赖项。

    5.5K10

    谷歌 Flutter 1.17 发布

    当应用程序准备发布时,开发人员将决定用户是否通过从API下载字体来接收字体,或者它与应用程序包预先捆绑在一起。...,“网络”选项卡将显示Flutter应用程序的网络流量。...此选项将您的应用程序捆绑到实际上未在您的设备上安装的通用Android“包装器”中,这与正常的启动选项不同。此外,在某些情况下它不起作用,例如,当您使用访问后台执行的插件时。...在此版本中,- androidx标志到flutter create现在是唯一可用的选项。尽管不使用AndroidX的现有应用程序可以继续使用Flutter进行编译,但现在是迁移到新库的好时机。...(Android) #49771 未为空画笔设置断言缓存提示 #50318 实时图像缓存 #50354 使用支杆盒高度计算选择矩形,以确保它们保持在可见范围内 #50733在gen_l10n中生成消息查找

    3.5K10

    C#8.0 新增功能

    07 可为空引用类型 在可为空注释上下文中,引用类型的任何变量都被视为不可为空引用类型 。 若要指示一个变量可能为 null,必须在类型名称后面附加 ?,以将该变量声明为可为空引用类型 。...对于不可为空引用类型,编译器使用流分析来确保在声明时将本地变量初始化为非 Null 值。 字段必须在构造过程中初始化。...如果没有通过调用任何可用的构造函数或通过初始化表达式来设置变量,编译器将生成警告。 此外,不能向不可为空引用类型分配一个可以为 Null 的值。...不过,编译器使用流分析来确保可为空引用类型的任何变量在被访问或分配给不可为空引用类型之前,都会对其 Null 性进行检查。 可以在可为空引用类型的概述中了解该功能的更多信息。...可以在此可为空引用类型教程中的新应用程序中自行尝试。 在迁移应用程序以使用可为空引用类型教程中了解迁移现有代码库以使用可为空引用类型的步骤。

    88230

    在 Android 11 及更高版本系统中处理可空性

    本文将带您了解 Android 11 SDK 引入了哪些变更,以便在 API 中显示更多的可空性信息。此外,我们还将介绍一些实用方法与技巧,帮助您做好准备,顺利应对 Kotlin 中的可空性问题。...@NonNull 注释则恰好与之相反,如果一个方法标有 @NonNull 注释,Kotlin 编译器会将该方法返回的结果视为非空类型,并禁止您在之后的代码中把该结果设置为 null。...下一步 如果您正在使用 Kotlin 编写代码,当您从 Android 10 升级至 Android 11 SDK 后,您可能会遇到一些新的编译器警告,另外,之前的警告也可能会以错误形式出现。...这是我们特意引入的变更,也是 Kotlin 编译器的特性之一。这些警告会提醒您当前代码可能会导致应用崩溃 (如果您编写的不是 Kotlin 代码,您可能会完全忽略这个风险)。...您可以通过在代码中添加空值检查来解决这些警告或报错。

    1.5K10

    Flutter 1.17版本重磅发布

    现在,当按钮的长度比没有溢出时可以显示的时间长时,文本选择菜单可提高Android和iOS的保真度。这在菜单项单词可能更长的语言环境中尤其明显。...”按钮后,“网络”选项卡将显示Flutter应用程序的网络流量。...此选项将您的应用程序捆绑到实际上并未在您的设备上安装的通用Android“包装器”中,这与我们正常的启动选项不同。此外,在某些情况下,例如, 当您使用访问后台执行的插件时。...在此版本中,-flux创建的--androidx标志现在是唯一可用的选项。虽然可以继续使用Flutter编译不使用AndroidX的现有应用程序,但现在是迁移到新库的绝佳时机。...开发通道的目标是在我们将它们广泛发布之前,从Flutter开发人员那里收集有关IDE集成新功能的反馈。如果您喜欢冒险,并希望向Flutter工具团队提供早期反馈,请立即注册!

    2.5K10

    配置Android项目 - 一些重要的事情

    为了快速生成和下载gitignore文件,我建议您使用gitignore.io网站。只需输入必要的关键字,如 — Android,Intellij并点击生成按钮。 ?...当从IDE运行或调试项目时,Android Studio会使用Android SDK工具生成的调试证书自动为您的APK签名。...proguard Android proguard用来做三件事: 压缩未使用的代码 — 帮助你不超出64k限制 优化代码和apk 混淆代码 — 使你的APK难以做逆向工程 问题是混淆和代码优化显着增加了编译时间...strict mode Android StrictMode可帮助您检测不同类型的问题: 可关闭对象没关闭 在主线程中读写文件或者访问网络 uri 暴露 … 每当检测到这样的问题,它可以显示适当的日志或应用程序崩溃...我建议你只在调试的时候打开它并且使用detectAll方法来检测所有类型的问题。 ? 这里是当你忘记关闭SQLiteCursor的日志的例子: ? 在模板代码中查看StrictMode。

    66820

    Android基础总结(4)——广播接收器

    在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的。...Android提供了一整套完整的API,允许应用程序自由地发送和接收广播。发送广播就是借助之前了解过的Intent,接收广播则需要用到广播接收器(Broadcast Receiver)。....2、广播接收器的使用方法   Android系统内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息。...此外,还有一点非常重要的是,android系统为了保证应用程序的安全性做了规定,如果程序中需要访问系统的关键性信息,必须在配置文件中声明权限才行,否则程序将会直接崩溃,比如像上面的查询网络状态就需要声明权限...使用本地广播:Android引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

    1.1K100

    速读原著-Android应用开发入门教程(Android应用程序的概念性描述)

    第 5 章 Android应用程序的内容 5.1 Android应用程序的概念性描述 Android 应用程序包含了工程文件、代码和各种资源,主要由 Java 语言编写,每一个应用程序将被编译成Android...每一个活动都被实现为一个独立的类,并且从活动(Activity)基类中继承而来,活动类将会显示由视图(View)控件组成的用户接口,并对事件(Event)做出响应。...如果它们正确执行了 Activity 生命周期,系统可以在任意时刻杀死进程来回收内存,并提供给前面 3 种类型的进程使用。...系统中通常有很多这样的进程在运行,因此要将这些进程保存在 LRU 列表中,以确保当内存不足时用户最近看到的进程最后一个被杀死。 (5)空(Empty)进程 不包含任何处于活动状态的应用程序组件。...广播接收器的生命周期 广播接收器有一个单一的回调方法 onReceive(),当广播消息到达接收器时,Android 将调用这个方法,并传递给包含在这个消息中的 Intent 对象。

    1K10

    C# 8.0 如何在项目中开启可空引用类型的支持

    disable 与 8.0 之前的 C# 行为相同,即既不认为类型不可为空,也不启用 null 相关的警告。...可为空警告上下文 用于告知编译器是否要启用 null 相关的警告,以及警告的级别。...将警告视为错误 以上只是警告,如果你希望更严格地执行可空引用的建议,可以考虑使用编译错误: 1 2 3 4 5 6 7 8 9 10 11 可为空注释上下文后,C# 编译器会将所有类型引用变量识别为以下种类: 无视 于是,无论你使用什么方式顶一个一个引用类型的变量,C# 编译器都不会判定这到底是不是一个可为空还是不可为空的引用类型。...#nullable enable: 在源代码中启用可空引用类型并给出警告。 #nullable disable: 在源代码中禁用可空引用类型并关闭警告。

    35620

    安卓应用安全指南 4.2.2 创建使用广播接收器 规则书

    4.2.2.2 小心和安全地处理收到的意图(必需) 虽然风险因广播接收器的类型而异,但处理接收到的意图数据时,首先应该验证意图的安全性。...对于广播敏感信息,只有可靠的广播接收器可以接收它,而其他广播接收器则不能。 以下是广播发送方法的一些示例。 方法是,通过使用显式意图,将广播仅仅发送给预期的可靠广播接收器,来固定地址。...方法是,通过将receiverPermission指定为内部定义的签名权限,并使可靠的广播接收器声明使用此签名权限,来发送广播。...有序广播用于接收来自接收器的返回信息,并使几个接收器逐一执行处理。 广播按优先顺序发送给接收器。...4.2.2.8 小心并安全地处理来自广播接收器的返回的结果数据(必需) 基本上,考虑到接收结果可能是攻击数据,结果数据应该被安全地处理,尽管风险取决于返回结果数据的广播接收器的类型。

    84430

    Kotlin 1.2 新特性

    现在,使用Kotlin编写的代码,可以在所有的应用程序中(包括后端,浏览器前端和Android移动应用程序)中重复使用。 ?...请注意,目前跨平台项目只是一个实验性功能,这意味着该功能已经可以使用,但可能需要在后续版本中更改设计 编译性能 在1.2的开发过程中,团队花了很多精力来优化编译系统,据官方提供的资料显示,与Kotlin...下图显示了使用Kotlin构建两个大型JetBrains项目的编译时间差异。 ? 语法与库优化 除了上面介绍的改动之外,Kotlin还在语法层面进行了部分改进,优化的部分有。...内联扩展空修复 在以前的版本中,在平台类型的空值上调用的内联扩展函数没有检查接收器是否为null,并因此允许null转义到其他代码中。...除此之外,Kotlin的编译器现在提供一个将所有警告视为错误的选项。

    1.7K100

    Kotlin 1.2 的新增特性

    :运行 Kotlin 1.2.0 版本的 JVM 来自显式类型的信息被用于类型推断 Kotlin 编译器现在可以使用类型转换信息进行类型推断。...这对 Android 开发者来说尤其重要,因为编译器现在可以在 Android API level 26 中正确分析范型 findViewById 调用: 改进 smart cast 当一个变量从一个安全调用表达式中被赋值并且被检查为...这可能会影响应用程序的整体性能;仅在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。 “手工”的解决方法是将控制流的子表达式的值存储在变量中,而不是直接在调用参数中对它们进行求值。...破坏性变更:通过内联的扩展接收器修复平台的 null 转义 在平台类型空值上调用的内联扩展函数并没有检查接收器是否为 null,并因此允许 null 转义到其他代码中。...工具 将警告视为错误 编译器现在提供了将所有警告视为错误的选项。在命令行中使用 -Werror,或使用以下的 Gradle 代码:

    2.8K70

    《移动互联网技术》第八章 消息与服务:掌握不同类型广播监听方式,以及创建通知的方法

    2**、本单元学习要求** (1) 掌握不同类型广播监听方式,以及创建通知的方法; (2) 掌握PendingIntent使用方法; (3) 理解异步处理和同步处理的联系和区别。...使用有序广播,在某一个时刻只有一个接收器收到消息,它处理完消息以后,再把消息发送给下一个接收器。收听广播的顺序由接收器的优先级来确定。接收器可以截断消息,不传递,这样后面的接收器就无法获得广播消息。....setContentText("Android应用界面中有哪两种类型的视图组件?") ​...AsyncTask的泛型参数指示异步任务中各种参数的类型,这些参数包括:Params表示给后台任务传递的参数;Progress是当前任务的执行进度,可以在界面上显示;Result指示任务完成后返回的结果...,当应用程序响应时间超过5秒时,系统就会弹出应用程序无响应的警告信息对话框,造成程序崩溃,严重影响用户体验。

    10510

    【老孟Flutter】Flutter 2 新增的功能

    在Flutter的Web支持博客文章中找到有关此稳定版本的更多详细信息。 Sound Null Safety 空安全性是Dart语言的重要补充,它通过区分可空类型和非可空类型进一步增强了类型系统。...这使开发人员能够防止null错误崩溃,这是应用程序崩溃的常见原因。通过将空检查合并到类型系统中,可以在开发过程中捕获这些错误,从而防止生产崩溃。...如果您是软件包作者,请查看迁移指南并考虑立即进行迁移。 Desktop 在此版本中,我们很高兴地宣布,Flutter的桌面支持已在稳定频道中以早期版本的标志提供。...另外,如果你是一个火力地堡的用户,我们很高兴地宣布,最流行的插件已被带到生产质量,包括空安全的支持,以及全套的参考文档和常见的使用教程使用Android,iOS,网页,和macOS。...Cupertino颜色分辨率API删除nullOk参数 69808从Scaffold.of和ScaffoldMessenger.of删除nullOk,为两者创建 68910从Router.of中删除nullOk参数,并使其返回不可为空的值

    7.9K20

    C# 可为空引用类型

    对于像我们这样长期使用 C# 编程的人来说,这很“正常”。不过,如果我们能够将一切推到重来,还是希望引用类型默认不可为空,并通过添加“?”显式允许为空。...将引用类型设为默认不可为空:将所有引用类型都设为默认不可为空,但实现这一点时,应使用可选择启用的编译器开关,而不是突然对开发人员的现有代码发出大量警告,让人应接不暇。...尽管可以将引用类型声明为可为空,或避免向不可为空类型分配空值,但稍后代码中也可能会出现新的警告或错误。...最重要的是,这意味着,现有 API(如 .NET API)能够使用可为空元数据进行更新,而不破坏 API。此外,这还意味着,不支持根据为空性修饰符进行重载。...遗憾的是,在 C# 8.0 中改进空引用类型处理有一个非常不幸的后果。将向来可为空声明转换为不可为空声明一开始会引入大量警告。

    19120
    领券