首页
学习
活动
专区
圈层
工具
发布

Android 中意料之外的应用崩溃以及它们的解决方案

image.png 如果问前端、后端甚至游戏开发人员之间存在什么共同点,那就是我们都讨厌应用产品出现 Bug,尤其是当这些错误导致应用崩溃时。...问题 在监视产品的崩溃日志时,我注意到一些问题与日俱增。该应用在正常测试条件下似乎运行良好,并且崩溃不可复现,直到应用程序从后台任务中进入前台。...复现崩溃 在模拟器或通过 USB 电缆(译者注:Android 11 也可使用 Wi-Fi 连接设备调试)连接的实际设备上使用 ADB 运行指令(如 Android Studio)运行的任何应用程序。...在 onCreate() 方法中,你需要比较当前 PID 和打包保存的 PID。 如果当前进程是是重新创建的流程,则重定向导航到 Splash Activity。...结论 在 Android 平台上,由于进程被终止而导致的应用崩溃是很常见的。而如果我们使用较新的 Android 版本,我们可以注意到,出于节省电源的目的,大量的后台应用程序被强制结束运行了。

1.9K10

systemUI导航栏的图标要用xml 矢量图替换

将 客户提供的 PNG 图片 完美转换为 Android Vector Drawable(用于 MTK 导航栏 Home 键)你说得对 —— 客户只给了 PNG,但 KeyButtonView 期望的是...Vector Drawable(XML),直接放 PNG 会导致 渲染异常或崩溃(Resources$NotFoundException 或 Failed to inflate)。...一键解决方案:PNG → Vector XML(推荐,3 步完成)步骤 1:使用 Android Studio 内置工具(最安全,官方支持)打开 Android Studio(任意版本)创建临时项目(或用现有...复杂时备用)如果 Android Studio 转换失败(图标太复杂):工具链接推荐指数vectormagic.comhttps://vectormagic.com5 stars(付费,质量极高)pngtosvg.comhttps...Studio GUI总结:客户 PNG → MTK 导航栏图标步骤操作工具1PNG → SVGvectormagic.com 或 Android Studio2SVG → Vector XMLAndroid

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

    Dropbox 如何解决 Android App 的内存泄漏问题?

    随着时间的推移,泄漏的内存会累积,导致应用程序性能变差,甚至崩溃。泄漏可能发生在任何程序和平台上,但由于活动生命周期的复杂性,这种情况在 Android 应用中尤其普遍。...当我们在应用中导航时,LeakCanary 会偶尔暂停以转储内存,并提供检测到的泄漏痕迹。 这个工具比我们之前的方法要好得多。...在 CI 上运行 LeakCanary 帮助我们学到了更好的编码模式,特别是涉及到新的库时,在任何代码进入生产环境前。...导致内存泄漏的一个最简单场景是:我们在 FragmentA 上。我们导航到 FragmentB,现在 FragmentA 在栈里。...任何绑定到 FragmentA 生命周期的视图现在已经不需要了,但都还保留在内存中。 在大多数情况下,这些泄漏很小,不会导致任何性能问题或崩溃。

    1.6K10

    Dropbox 是如何解决 Android App 的内存泄漏问题的?

    随着时间的推移,泄漏的内存会累积,导致应用程序性能变差,甚至崩溃。泄漏可能发生在任何程序和平台上,但由于活动生命周期的复杂性,这种情况在 Android 应用中尤其普遍。...当我们在应用中导航时,LeakCanary 会偶尔暂停以转储内存,并提供检测到的泄漏痕迹。 这个工具比我们之前的方法要好得多。...在 CI 上运行 LeakCanary 帮助我们学到了更好的编码模式,特别是涉及到新的库时,在任何代码进入生产环境前。...导致内存泄漏的一个最简单场景是:我们在 FragmentA 上。我们导航到 FragmentB,现在 FragmentA 在栈里。...任何绑定到 FragmentA 生命周期的视图现在已经不需要了,但都还保留在内存中。 在大多数情况下,这些泄漏很小,不会导致任何性能问题或崩溃。

    1.4K30

    Android Studio 4.0 稳定版发布了

    2、Java 8库在D8和R8中逐渐消失 Android Studio 现在支持使用多种 Java 8 语 言API,而无需给应用程序设置最低 API 级别。...现在,当使用 Android Gradle 插件 4.0.0 及更高版本时,可以包括一个依赖于另一个功能模块的功能模块,即 :video 功能可以取决于:camera 功能,而功能取决于基础模块,结果如下图所示...2、Live Layout Inspector 使用 Live Layout Inspector 调试版式,在将应用程序部署到设备时可提供对应用程序UI完整地实时更新。...image Property values resolution stack:(属性值解析堆栈):调查资源属性值在源代码中的起源,并通过遵循属性窗格中的超链接导航到其位置。 ?...new destination时,即可使用“New Android Fragment wizard”向导和新的片段模板。

    6.2K20

    Android Studio 4.1 发布啦

    模拟器 现在用户可以直接在 Android Studio 运行 Android 模拟器,该功能可以帮助开发者节省屏幕空间,使用快捷按键可以在模拟器和编辑器窗口之间快速导航,可以在一个窗口中查看模拟器和代码布局...然后模型文件就会被导入到的项目中,并将其放置在 ml/ 文件夹中,如果该目录不存在,Android Studio 将为创建该目录。 ?...要导航到另一个事件,请从表中选择另一行。 Display data :在“Display”部分,SurfaceFlinger 和 VSYNC 的新时间线可以帮助开发者调查应用程序UI中的渲染问题。...例如,单击图片 使用给定类型的方法旁边的装订线操作可导航到该类型的提供程序;相反单击 ? 装订线操作会导航到将类型用作依赖项的位置。...本机崩溃报告的符号 当本机代码发生崩溃或ANR时,系统会生成堆栈跟踪,该跟踪是程序崩溃之前一直在程序中调用的嵌套函数序列的快照。

    9.3K10

    LeakCanary 学习与实践

    此 bitmaps 是设备屏幕的大小,创建它时我们有大量的内存不足(OOM)导致崩溃。 ?...还需要弄清楚导航泄漏的导航顺序,可能是纯粹暴力方式; 在OOM发生时转储堆; 使用MAT或YourKit在堆转储周围查找并找到应该被垃圾回收的对象;; 计算从该对象到GC根的最短强引用路径。...构建错误:无法解决 如果在 Android Studio 处于脱机工作模式时添加 LeakCanary 依赖项,则会发生这种情况。...Instant Run 可以触发无效泄漏 启用Android Studio的 Instant Run 功能可能会导致LeakCanary报告无效的内存泄漏。...发现彩蛋 Android SDK可能导致泄漏吗? 是。在AOSP以及制造商实现中,已经存在许多已知的内存泄漏。当发生这样的泄漏时,作为应用程序开发人员,我们几乎无法解决此问题。

    1.8K30

    Android Studio Design Tools 中的 UX 更改 — Split View

    介绍 Design Tools 中的 Split View 在 Android Studio 3.6 中,我们对设计文件的编辑模式进行了一些改动,相较于之前在左下角切换 Text 或 Design 的编辑模式...您现在可以使用新的 Split 模式打开导航栏文件并对其进行编辑,同时还能对其进行预览。这对于编辑大且复杂的图形时尤其有用。...而现在,您只需要单击 XML 部分上的 标签就可以在图形界面上显示该代码片段,即使该片段位于嵌套的图层内也可以做到,如图 7 所示。...类似地,您可以通过在编辑器的图形中选择某一个组件,就可以在导航图中轻松定位到相应的元素。对文本的选择会跳转到相应的 XML 标签中。 ? ?...该文件的另一个实例会以垂直拆分的形式在单独的选项卡中打开; 将新的标签页拖动到 Android Studio 界面外,来创建一个浮动窗口; 在新的选项卡中,选择 Design 模式来让该窗口能够同浮动预览的显示效果一样

    3.3K20

    #AndroidDevSummit,就在此刻!

    Navigation 架构组件提供了使用单个 Activity 在应用中实现 Android 导航原则的简化方法。...另外,Android Studio 中新的 Navigation Editor 可创建并编辑您的导航架构。如此便可消除导航样板,为您提供原子导航操作、更易实现的动画转场以及更多其他特性。...在今年的 I/O 大会上,我们推出了 Slices,这是一种将用户带入您应用的全新方式。Slices 就像是您应用中的一个小片段,您可以在其中呈现出内容与操作。您可以预订航班、播放视频或叫车。...Android Studio 3.3 将发布测试版 3。在即将发布的版本中,我们有望看到对质量和基本原则的高度关注:减少崩溃与挂起的次数、优化内存使用以及修复影响用户使用的错误。...在 Android Studio 3.3 测试版中,您现在可以构建一个启动免安装应用的软件包。

    1.2K20

    Android Studio 4.0重磅发布:全新的 Motion 编辑器及众多更新都在这里!

    在为 R8 创建规则文件时,Android Studio 现在提供了智能编辑器功能,例如语法高亮显示、自动完成和错误检查。...更多信息参考: http://d.android.com/studio/build/build-analyzer Java 8 语言库在 D8 和 R8 中 desugaring 早期版本的 Android...在 Android Studio 4.0 中,无论你的应用的 minSdkVersion 如何,都可以使用 desugaring 引擎来支持 Java 语言 API。...这意味着你现在可以使用标准语言 API 了,以前它们只在最新的 Android 版本中可用(例如 java.util.stream,java.util.function 和 java.time)。...功能上的依存关系 使用 Android Gradle 插件 4.0.0 及更高版本时,你现在可以指定一个动态功能模块依赖于另一个功能模块。

    5.7K30

    Android入门教程 | Fragment 基础概念

    Java代码加载Fragment 或者,通过编程方式将片段添加到某个现有 ViewGroup。 在 Activity 运行期间,您可以随时将片段添加到 Activity 布局中。...如何切换 fragement(不重新实例化) 翻看了 Android 官方 Doc,和一些组件的源代码,发现 replace()这个方法只是在上一个 Fragment不再需要时采用的简便方法....正确的切换方式是 add(),切换时 hide(),add()另一个 Fragment;再次切换时,只需 hide()当前,show()另一个。...Fragment 替代 TabActivity 做导航,性能更好。 Fragment 在 4.2.版本中新增嵌套 fragment 使用方法,能够生成更好的界面效果。 3....一个 Fragment 容器中只能添加一个 Fragment 种类,如果多次添加则会报异常,导致程序终止,而 replace 则无所谓,随便切换。

    5.2K40

    Android Studio 4.0 正式版发布

    Android Studio 4.0 的亮点众多,这里列出几项: 全新的 Motion Editor,可助您轻松打造应用动效;Build Analyzer 可以帮您找到导致编译速度缓慢的症结;您还可以尽情使用...您可以尽情在应用中导航、触发动画和视图转场,在这同时依然能精确调试 UI,让每一个像素都尽如人意。前往《Android Studio 4.0+ 中新的 UI 层次结构调试工具》了解更多。...在创建 R8 的规则文件时,Android Studio 现在提供了智能编辑器功能,包括语法高亮、补全以及错误检查等。...在 Android Studio 4.0 中字节码转换引擎得到了扩展,现在不管您应用的 minSdkVersion 是多少,都可以使用 Java 8 API (比如 java.util.stream、java.util.function...功能模块层级的依赖关系 image.png 在使用 Android Gradle 插件 4.0.0 及以上版本时,您可以指定一个动态功能模块依赖于另一个功能模块。

    4.2K31

    Android Studio 中 System Trace 的新增功能

    在 Android Studio 4.0 中,我们已经对 CPU Profiler 的 UI 做了大量调整来提供更加直观的工作流记录,而在 Android Studio 4.1 中,我们基于开发者们的反馈对此功能进行了持续改进...在顶部,您可以看到一个时间轴,它仅仅映射了跟踪过程而不是整个分析过程。您可以使用范围选择器快速缩小范围到特定的时间段,而下面的部分则会显示对应的详细数据。 ?...从 Android Studio 4.1 Canary 9 开始,您可以通过拖动鼠标在  Thread  部分进行框选。...作为补充,我们在 Android Studio 4.1 Canary 10 中添加了  Summary  选项卡,用于展示线程状态分布、跟踪事件统计等信息。...您也可以通过从表中选择一行来导航到另一个事件。 ?

    3.7K50

    ApacheCN 安卓译文集 20211225 更新

    二十五、构建简单的图片库应用 二十六、使用导航抽屉和片段的高级 UI 二十七、安卓数据库 二十八、临别赠言 Kotlin 安卓编程初学者手册 零、前言 一、安卓和 Kotlin 入门 二、Kotlin...五、安卓画布类——绘制到屏幕上 六、使用循环重复代码块 七、使用 Java of、else和switch做决策 八、面向对象编程 九、游戏引擎、线程和游戏循环 十、球拍和球的编码 十一、碰撞、音效、支持不同版本安卓...、将现有库移植到安卓系统 十、使用渲染脚本的密集型计算 十一、后记 安卓 SQLite 基础知识 零、前言 一、进入 SQLite 二、把点连接起来 三、分享就是关怀 四、小心连线 Android Studio...Studio 应用开发 零、前言 一、安装和配置 Android Studio 二、启动项目 三、导航项目 四、使用代码编辑器 五、创建用户界面 六、谷歌游戏服务 七、工具 八、排除故障 九、准备发布...代码 使用安卓片段创建动态 UI 零、前言 一、片段和用户界面模块化 二、片段和用户界面灵活性 三、片段生命周期和专业化 四、使用片段事务 五、创建丰富的导航 六、片段与材质设计 Unity 安卓游戏开发学习手册

    8.9K20

    Android Studio 4.2 现已发布!

    Safe Args 支持 - 如果您希望在使用 Jetpack 导航组件时在应用中的两个目标位置之间传递数据,建议使用 Safe Args 来确保数据封装。...通过使用 Android Studio 4.2,您现在可以自动补全 Directions Args 的代码,并实现从源到 XML 的代码导航。点击这里 了解更多详情。...新增了离线模式,这样您在进程中断后仍可以保持对应用数据库的检查,更易于在应用崩溃后对其做出诊断。同时我们也添加了一项便捷的查询历史记录选项。...构建 AGP 升级助手 - 将项目迁移到最新版本的 Android Gradle 插件 (AGP) 有时候比较棘手,在使用已弃用的 API 时更是如此。...此功能是早期 Android Studio 版本中的一项功能,现在我们再次引入了它并将其直接集成到 Android Studio 4.2 中的设备选择菜单中。

    2K20

    Android Studio 4.1发布:可直接运行安卓模拟器、支持 Dagger 导航和 TensorFlow Lite 模型

    此版本的一大主题是帮助你在使用 Android Jetpack 库(这是 Android 的库套件,旨在帮助开发人员遵循最佳实践并更快地编写代码)时提高工作效率。...在 Android Studio 中运行 Android 模拟器 Dagger 导航支持 Dagger 是 Android 上用于依赖项注入的流行库。...边线操作,会将你导航到该类型的提供方。相反,单击 ? 边线操作会将你导航到将类型用作依赖项的位置。Android Studio 还支持通过 Jetpack Hilt 库定义的依赖项的导航操作。...当原生代码中发生崩溃或 ANR 时,系统会生成堆栈轨迹,这是你的程序在崩溃之前调用过的嵌套函数序列的快照。...在优化使用其他工具(如 Unity 或 Visual Studio)构建的 Android 游戏时,此功能很有用。

    5.5K30
    领券