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

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

Android 中,后台状态恢复应用程序时可能会产生崩溃 —— 此类崩溃是意外发生的,而且仅通过查看崩溃日志,我们很难理解崩溃的具体原因以及解决问题,而本文讨论了此类问题及其解决方法。...问题 在监视产品的崩溃日志,我注意到一些问题与日俱增。该应用在正常测试条件下似乎运行良好,并且崩溃不可复现,直到应用程序后台任务中进入前台。...当应用程序进程被终止的时候,所有的单例对象和临时数据都同时丢失了,而现在如果你返回你的应用程序,系统会创建一个新的进程,而你的应用程序你退出时候的 Activity 栈顶执行 Resume 函数恢复该...由于此时你的所有的单例对象都丢失了,因此当这个 Activity 尝试访问相同的对象,就会遇到空指针异常而崩溃退出。 这是个问题。在我们继续讨论解决方案之前,让我们复现一下这种情况。...当用户后台导航回被结束了的应用程序时候,该应用程序将从 SplashActivity 重新启动,就像是一次新的启动。 这将防止应用程序访问在进程重建过程中可能已丢失的数据,从而防止应用程序崩溃

1.1K10

Android deeplink漏洞

通过添加intent-filters来设置深层链接,并根据传入意图中提取的数据将用户引导至正确的活动。因此,多个应用程序能够处理相同的深层链接(Intent)。...如果用户不希望应用程序成为默认处理程序,他们可以设备的系统设置中覆盖此行为。...中打开 URL,您可以尝试绕过 URL 验证并打开任意 URL。...参考: 报告:Android 应用程序 (com.shopify.mobile 不安全的参数处理 Deeplinks 允许用户向应用程序提供参数,这些参数可用作执行本地操作、请求 API 等的参数。...例如,假设应用程序通过以下流程打开基于 http/https URL 的本地文件: 用户发送链接https://website.com/file.pdf 应用程序解析 URL 并检索 URL 路径:file.pdf

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

我以为发现了Android 14系统中的一个bug,然而...

我看到这条消息之后的第一感觉就是,貌似和我印象中Android 14的行为并不一致。 因为没有任何错误日志可以观察到这种现象是不应该的,我印象中用法不正确的话是会直接导致应用程序崩溃。...后来我们又尝试了一下使用隐式Intent启动Serivce,在不指定包名的情况下也会崩溃。只有发送广播不会崩溃,且这条广播是收不到的,相当于广播莫名其妙丢失了。...我去翻了翻《第一行代码 第3版》中对广播这部分的解释,里面确实有提到,Android 8系统开始,静态注册的BroadcastReceiver,如果想要接收得到广播消息,Intent中必须明确指定App...百思不得其解的我只好开始尝试把锅往Google身上甩了,我在想着要么这就是Android 14系统中的一个bug,要么就是Android官方文档没写清楚,把BroadcastReceiver这种特殊情况漏写了...现在我们已经知道,App target到Android 14之后,隐式Intent启动内部Activity和Serivce是会崩溃的。 但是这个崩溃的日志是什么,我却从来没有仔细观察过。

23310

App安全测试—Android安全测试规范

查看或检索文件中是否存在用户信息、业务数据、服务系统信息或其他敏感信息。如果存在,记录漏洞,停止测试。 预期结果:客户端数据库文件中不存在敏感数据。...执行步骤 使用工具Drozer扫描暴露的broadcast组件run app.broadcast.info -a xxxx -i和相关action信息 尝试应用程序的receiver组件发送空值,run...app.broadcast.send --action xxx,查看是否能够造成应用程序崩溃,形成拒绝服务。...尝试调用服务组件,run app.service.start --action 服务名 --component 包名 服务名,查看是否能够造成应用程序拒绝服务。...B应用负责接收intent的组件,在解析intent数据,会通过Intent的getXXXExtra()函数,如果解析为空数据、异常、或是畸形数据,就可能会导致程序崩溃

4K42

常见Android面试题及答案(详细整理)

Android Service只继承了onCreate(), onStart(),onDestroy()三个方法,当我们第一次启动Service,先后调用onCreate(), onStart()这两个方法...在调用Intent名称使用ComponentName也就是类的全名为显示调用。这种方式一般用于应用程序的内部调用,因为你不一定会知道别人写的类的全名。...Content provider存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。...4、使用Content Provider存储数据,是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。...典型的做法是把对象数据成员设为null或者集合中移除该对象。当出现以下情况,会造成内存泄露: 1、 数据库的cursor没有关闭。

2.5K11

android之如何使用Android的搜索框架

当你需要在你的应用程序中提供搜索服务,通过使用Android的搜索框架,应用程序将显示一个自定义搜索对话框来处理用户的搜索请求。...通过一个简单的搜索按钮或您的应用程序中调用API,搜索对话框就会显示在屏幕的顶部,并会自动显示应用程序图标。 本文将教你如何为你的应用程序提供一个自定义搜索对话框。...当我们在应用程序中的 OtherAcitivity中执行搜索请求,MySearchableActivity将会被加载用于执行搜索并显示搜索结果。...执行一个搜索 当一个Activity声明为可搜索,执行实际的搜索包括三个步骤:接收查询,检索你的数据,并提交结果。...接收搜索查询 当搜索对话框执行搜索,刚才配置的可用于搜索的Acitivity将会被Intent激活,同时带着一些搜索相关的参数,你需要检查Intent并做出搜索响应,如下所示: @Override

71030

Android 13 适配指南

Intent 过滤器会屏蔽不匹配的 intent 当 App 以 Android 13(33) 或更高版本为 Target 的其他应用的导出组件发送 intent ,仅当该 intent 与接收应用中的... 元素匹配,系统才会传送该 intent,换言之系统会屏蔽所有不匹配的 intent,但以下情况除外: 发送给其他应用的未声明任何 intent 过滤器的组件的 intent...,必须为每个广播接收器指定 RECEIVER_EXPORTED或 RECEIVER_NOT_EXPORTED,否则当 App 尝试注册广播接收器,系统会抛出 SecurityException //...但是进行 exit() 调用可能会导致当前正在访问 App 的其他应用出现崩溃。 ❞ 剪贴板擦除 Android 之前一直提供了一个剪贴板服务,所有 App 都可以使用它来放置和检索文本。...过去,JobScheduler 仅使用该信号让预提取作业有机会使用免费或多余的数据,在 Android 13 中系统现在会尝试确定应用下次启动的时间,并根据该估算值运行预提取作业,应用应尝试使用“预提取

4.7K31

Android Service完全解析,关于服务你所需知道的一切(下)

让我们来动手尝试一下吧。...为什么点击Start Service按钮程序就不会崩溃,而点击Bind Service按钮就会崩溃呢?...AIDL(Android Interface Definition Language)是Android接口定义语言的意思,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个...然后创建一个新的Android项目,起名为ClientTest,我们就尝试在这个程序中远程调用MyService中的方法。...不过还有一点需要说明的是,由于这是在不同的进程之间传递数据Android对这类数据的格式支持是非常有限的,基本上只能传递Java的基本数据类型、字符串、List或Map等。

755100

Android Service完全解析,关于服务你所需知道的一切(下)

让我们来动手尝试一下吧。...为什么点击Start Service按钮程序就不会崩溃,而点击Bind Service按钮就会崩溃呢?...AIDL(Android Interface Definition Language)是Android接口定义语言的意思,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个...然后创建一个新的Android项目,起名为ClientTest,我们就尝试在这个程序中远程调用MyService中的方法。...不过还有一点需要说明的是,由于这是在不同的进程之间传递数据Android对这类数据的格式支持是非常有限的,基本上只能传递Java的基本数据类型、字符串、List或Map等。

53840

Android四大组件之Service

Service是一个单独的Android组件,Service运行在主线程上,如果想在Service中处理很占时间的操作,必须在Service中开线程,以降低Activity没有响应的风险; 4....2.功能提供:Service并不会接收任何的广播,只接收指定的广播提供状态数据,这时需要绑定Service,绑定Service要管理好Service,一般在Activity的onStop函数里进行解绑...onStartCommand()方法很重要,我们在该方法中根据传入的Intent参数进行实际的操作,比如会在此处创建一个线程用于下载数据或播放音乐等。...当 client销毁, client会自动与 Service解除绑定( client会有 ServiceConnectionLeaked异常,但程序不会崩溃)。...8.如何保证服务不会被杀死 第一种方式,返回 START_STICKY 或 START_REDELIVER_INTENT 当 Service因内存不足而被系统kill后,一段时间后内存再次空闲时,系统将会尝试重新创建此

80010

意图Intent

类型-指定意图数据的显示类型(MIME类型)。通常这个类型是数据本身推断出来的。通过设置此属性,可以禁用该评估并强制显式类型。 组件-指定用于意图的组件类的显式名称。...例如,这可以在电子邮件应用程序中使用,以允许用户选择一些数据作为附件。 在Intent类中定义了各种标准的Intent动作和类别常理,但是应用程序也可以定义它们自的。...如果尚未在意图中提供该类型,则从Intent数据检索该类型。与动作一样,如果某个类型包含在意图中(在某数据中显式或隐式地包含),则该组将必须按组件列出。...数据类型 vnd.android.cursor.item/vnd.google.note是一个URI,从中vnd.android.cursor.item可以检索到包含我们的记事本data(vnd.google.note...串 ACTION_PASTE 活动操作:在给定的容器中创建一个新的项目,剪贴板的当前内容初始化它。 串 ACTION_QUICK_CLOCK 当用户点击系统“快速设置”区域中的时钟小部件发送。

91310

聊一聊Android 6.0的运行时权限

本文讲尝试回答这一些问题,希望读者阅读完成之后,都能找到较为完美的答案。...这种情况下,当我Google Play安装一个应用,在安装之前会得到这样的权限提示信息。 ?...棉花糖运行时权限 棉花糖开始,Android系统引入了新的权限机制,即本文要讲的运行时权限。 何为运行时权限呢?...当用户选择允许,我们就可以在onRequestPermissionsResult方法中进行响应的处理,比如打开摄像头 当用户拒绝,你的应用可能就开始危险了 当我们再次尝试申请权限时,弹出的对话框和之前有点不一样了...些许建议 不要使用多余的权限,新增权限时要慎重 使用Intent来替代某些权限,如拨打电话(和你的产品经理PK去吧) 对于使用权限获取的某些值,比如deviceId,尽量本地存储,下次访问直接使用本地的数据

1K40

targetSdk27 FileProvider 摄像和照相

2.3提供一个称为严苛模式(StrictMode)的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益。...= new Intent(MediaStore.ACTION_VIDEO_CAPTURE); // MediaStore.EXTRA_VIDEO_QUALITY 表示录制视频的质量,...而 Android N 开始,将不允许在 App 间,使用 file:// 的方式,传递一个 File ,否者会抛出 FileUriExposedException的错误,会直接引发 Crash。...FileProvider是android support v4包提供的,是ContentProvider的子类,便于将自己app的数据提供给其他app访问。...当手机开机或者有SD卡插拔等事件发生,系统将会自动扫描SD卡和手机内存上的媒体文件,如audio,video,图片等,将相应的信息放到定义好的数据库表格中。

84510

安卓入门-第二章-探究活动

作为你的导师,我有义务帮你制定好后面的学习路线,那么今天我们应该哪儿入手呢?现在你可以想象一下,假如你已经写出了一个非常优秀的应用程序,然后推荐给你的第一个用户,你会哪里开始介绍呢?...当然是Android Studio了,之前在使用Eclipse创建活动或其他系统组件,很多人都会忘记要去Android Manifest.xml中注册一下,从而导致程序运行崩溃,很显然Android...就成为我们这个程序的主活动了,即点击桌面应用程序图标首先打开的就是这个活动。...在启动活动传递数据的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了...第二个参数resultCode ,即我们在返回数据传入的处理结果。第三个参数data ,即携带着返回数据Intent

2.9K20

Android 2.0 --- 2.3 API变更概要:

· 新的缩微图 API : 检索需要的图片和视频的缩微图.  8、Other Framework   · android.R.style 中新的系统主题,能够更加简单的显示当前acitivities...如果用户切换到另一个Android设备,他就可以之前的设备中恢复数据。  2、Cloud-to-Device消息API。云中的用户/系统可以凭借这种增强在设备上触发动作。...Android 2.2开发者和商店用户会如下新特性中受益无穷:   可以在Android商店搜索应用,包括应用数据   更新——点击一次按钮后会自动更新所有应用  5、崩溃与冻结报告。...Android2.2集成了崩溃/冻结报告特性,这样在崩溃用户就可以将完整的细节信息报告给应用发布者了   PC上浏览商店并将应用直接下载到设备上。...使用限制模式优化的Android应用程序可以查看android.os.StrictMode包的具体介绍。

54640

Android SDK上手指南:知识测试

' android:src='@drawable/my_shape' 问题八 我们需要将以下哪种activity元素包含在清单当中,从而在应用程序设备菜单中启动执行该activity?...保存原始数据项的键值对。 在表当中以行和列的方式保存结构化数据检索互联网数据。 将数据保存在用户设备上的外部文件中。 问题十一 应用程序在读取并写入文件,我们需要如何处理I/O错误?...尝试并获取与I/O代码相关的数据块。 向用户输出警告信息。 问题十二 在尝试向外部存储机制进行写入之前,我们的应用程序不需要执行以下哪个步骤? 检查外部存储机制是否可用。...使用一个单独的进程、而不要利用用户界面进程进行数据获取。 在主activity类中的一个方法内获取数据。 将检索数据保存在SQLite数据库当中。 问题十四 以下哪种说法存在错误?...Intent Thread View Service 问题十六 当一款应用程序启动并处于resumed状态,以下哪种回调方法不会执行?

85820

Android开发(九) Android Manifest.xml 结构详解

,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作) D、android:debuggable 这个字面上就可以看出是什么作用的,当设置为true,表明该APP在手机上可以被调试。...G、android:hasCode('true'or 'false') 表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件,不会去尝试加载任何的APP代码 一个应用程序自身不会含有任何的代码...当应用程序进程开始,该类在所有应用程序组件之前被实例化。...t3181.html 8、android:noHistory 当用户Activity上离开并且它在屏幕上不再可见,Activity是否Activity stack中清除并结束。...,先后调用了onCreate(),onStart()这两个方法,当停止Service,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service,不会在执行onCreate

98030

【Google Play】 Android 应用中跳转到 Google Play 中 ( 跳转代码示例 | Google Play 页面的链接格式 | Google Play 免安装体验 )

文章目录 前言 一、 Android 应用跳转到 Google Play 代码 二、Google Play 页面的链接格式 三、Google Play 免安装体验 前言 本博客参考资料 链接到 Google...; 一、 Android 应用跳转到 Google Play 代码 ---- 首先 , 创建 Intent , 设置其 Action 为 “android.intent.action.VIEW” ,...* 输入:{@link#getData}是从中检索数据的URI。 * 输出:无。...= "android.intent.action.VIEW"; 然后 , 设置 Uri 操作数据 , 该 Uri 就是对应的 Google Play 页面链接 ; /** * 设置此意图操作的数据...对应的页面 , 不再弹出选择器 ; 否则打开 , 会显示应用的选择器 ; /** * (通常是可选的)设置一个明确的应用程序包名称,该名称限制此意图将解析到的组件。

4.9K20
领券