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

聊一聊未捕获异常与进程退出的关联

之前的文章JVM 如何处理未捕获异常 我们介绍了JVM如何处理未捕获异常,今天我们研究一个更加有意思的问题,就是在JVM中如果发生了未捕获异常,会导致JVM进程退出么。...在主线程中制造未捕获异常 同时上面的场景,在通用的JVM和Android上表现有一些差异,我们也都会进行覆盖研究。...(应该是Thread-0)程因为NPE未捕获而导致线程销毁 主线程不受刚刚异常的影响(进程还存在),在睡眠10秒后,会打印出所有线程的信息(不包含刚刚崩溃线程Thread-0的信息) //异常发生 输出线程名称和发生异常的时间...展示一个崩溃的对话框 在finally 部分,杀掉当前的进程 Android系统会在进程启动后,通过下面的代码为所有的线程设置默认的UncaughtExceptionHandler /* set default...,只有主线程一个非守护线程,主线程销毁,所以进程会结束 第二段代码中,主线程销毁后,还有一个Thread-0(由主线程启动,所以也是一个非守护线程),JVM会等待其结束后而退出。

1.4K10

Android M (API23) 中对权限的授权处理

在API 23中,如果我们将compileSdkVersion和targetSdkVersion同时指定为23,而且我们没有显式的提醒用户去授予权限, 那么将导致App运行的崩溃。...; /** * 权限控制工具类: * 为了适配API23,即Android M 在清单文件中配置use permissions后,还要在程序运行的时候进行申请。...Activity会再次弹出系统的Permisssions申请授权对话框。...* *****3.如果用户Deny了权限,那么下次再次进入Activity,会再次申请权限,这次的权限对话框上,会有一个选项“never ask again”: * ********1).如果用户勾选了...若选择了Allow,则表示该权限已经被授权,无须其它操作; * ********3).如果用户未勾选上面的选项,若选择了Deny,则下次启动Activity会再次弹出系统的Permisssions申请授权对话框

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

    React Native 启动白屏问题解决方案,教程

    问题分析: 为什么会产生白屏? React Native应用在启动时会将js bundle读取到内存中,并完成渲染。这期间由于js bundle还没有完成装载并渲染,所以界面显示的是白屏。...在《React Native Android启动屏,启动白屏,闪现白屏》一文中 我们使用的是在根视图容器上添加一个视图作为启动屏,当js bundle加载并渲染完成后,再将添加的视图从根视图上移除。...在APP启动的时候显示; 在js bundle加载并渲染完成后消失; 全屏显示; 显示的内容可以通过 layout xml 进行修改; 上述是我们对这个对话框的基本需求,现在就让我们来实现这一需求: 第一步...上述代码中,show的第二个参数fullScreen表示启动屏是全屏显示(即是否隐藏状态栏),代码会控制对话框加载不同的主题样式R.style.SplashScreen_Fullscreen与R.style.SplashScreen_SplashTheme...由于iOS在JS模块中控制启动屏的关闭的方法和Android中第三步:在JS模块中控制启动屏的关闭的方法是一样的,这里就不再介绍了。

    2.7K60

    Android处理崩溃的一些实践

    在Android程序中,引起崩溃的多属于运行时异常或者错误,对于这些异常我们很难做到类似Checked Exception那样显式捕获,因而最终导致了程序崩溃。...Android中的崩溃收集沿用了Java的收集机制,实现起来比较简单。...在Android崩溃的时候,我们都会看到类似这样的对话框 ?...如果我们采取主进程仍弹出对话框,其他进程不弹出的策略,那么我们的问题,可以总结成如下三个 如何判断进程为主进程还是其他进程,或者某个进程 如何在某些进程不弹出应用崩溃对话框 如何在主进程弹出崩溃对话框...如下是在自定义异常处理的构造方法中获取Android默认处理 1 2 3 4 public DroidUncaughtExceptionHandler(Context context) { mAppContext

    1.5K20

    如何用 Android vitals 解决应用程序的质量问题

    即使在使用硬件实验室进行测试时,它也会以其他方式难以获得的规模为你提供信息。 Android vitals 可以提醒你的问题包括崩溃、应用程序无响应(ANR)和渲染时间。...在本文中,我将着眼于以下两个问题: 过度唤醒。这会影响电池的续航时间,如果用户无法及时充电,可能会导致他们无法使用设备。这种行为很可能会让用户迅速卸载你的应用。 应用程序无响应(ANR)事件。...发生冻结时,如果你的应用位于前台,会弹出对话框让用户选择关闭应用或等待响应。从用户的角度来看,这种行为与应用崩溃一样糟糕。...要确定你的应用在哪些地方设置了唤醒警报,请在 Android Studio 中打开 AlarmManager 类,右键单击 RTC_WAKEUP 或 ELAPSED_REALTIME_WAKEUP 字段并选择...你还可以选择 StrictMode 在检测到阻塞调用时如何提醒你:通过让应用程序崩溃、Log 信息或者是显示对话框。更多详细信息,请参阅 ThreadPolicy.Builder类。

    2.3K10

    如何改善应用启动性能 | Facebook 应用的经验分享

    今年,Google Android 团队和 Facebook 应用团队一直在合作研究这方面的量化指标,并共享优化方法,以改善应用启动情况。...Google Android 的公开文档中包含了很多关于 应用启动优化 的信息。这里我们想进一步分享其在 Facebook 应用中的实践情况,以及哪些因素有助于改善应用启动性能。...启动时的崩溃是最让人沮丧的事情,也是让用户放弃您应用的最快方式,请优先判定和处理这些问题。 切莫忘记功能可靠性 - 另外,不要忘记功能可靠性。...为改善应用启动速度,Android 系统会进行调整,以优先处理在调用 reportFullyDrawn() 之前发生的工作。在您的应用处于完全可用状态时调用这个方法可以改善应用的启动时间。...切莫忘记用其衡量应用表现情况。 用 Android Vitals 监控您应用的技术性能,有助于改善应用启动体验。

    64620

    聊一聊Android 6.0的运行时权限

    Android 6.0,代号棉花糖,自发布伊始,其主要的特征运行时权限就很受关注。因为这一特征不仅改善了用户对于应用的使用体验,还使得应用开发者在实践开发中需要做出改变。...特殊权限,顾名思义,就是一些特别敏感的权限,在Android系统中,主要由两个 SYSTEM_ALERT_WINDOW,设置悬浮窗,进行一些黑科技 WRITE_SETTINGS 修改系统设置 关于上面两个特殊权限的授权...不支持运行时权限会崩溃么 可能会,但不是那种一上来就噼里啪啦崩溃不断的那种。...系统会弹出一个对话框提醒撤销的危害,如果用户执意撤销,会带来如下的反应 如果你的程序正在运行,则会被杀掉。...如果新的权限导致读取不到,避免导致统计的异常。建议在完全支持运行时权限之前,将对应的值写入到App本地数据中,对于新安装的,可以采取其他策略减少对统计的影响。

    1.1K40

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

    我看到这条消息之后的第一感觉就是,貌似和我印象中Android 14的行为并不一致。 因为没有任何错误日志可以观察到这种现象是不应该的,我印象中用法不正确的话是会直接导致应用程序崩溃。...那么此时你还使用上述的代码来选择照片,启动的到底是谁的Activity? 这种情况下,系统也不知道你到底想要启动谁,所以就只能弹出一个对话框,让用户自己去选择。...后来我们又尝试了一下使用隐式Intent启动Serivce,在不指定包名的情况下也会崩溃。只有发送广播时不会崩溃,且这条广播是收不到的,相当于广播莫名其妙丢失了。...现在我们已经知道,App target到Android 14之后,隐式Intent启动内部Activity和Serivce是会崩溃的。 但是这个崩溃的日志是什么,我却从来没有仔细观察过。...那么这里考一下大家Android这三大组件在无法处理发起Intent的情况下,各自的行为是什么? 如果没有任何一个Activity能够处理Intent启动Activity的请求,App会崩溃。

    88710

    系统捕获异常并发送到服务器

    大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象...,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信息,并发送这些信息到服务器供开发者分析和调试程序...在应用程序启动时Application会首先创建,然后才会根据情况(Intent)来启动相应的Activity和Service。...如果程序出现了未捕获异常,默认会弹出系统中强制关闭对话框。我们需要实现此接口,并注册为程序中默认未捕获异常处理。这样当未捕获异常发生时,就可以做一些个性化的异常处理操作。...(OutputStream out, String comments),用来将Properties实例中的键值对外输到输出流中,但是在使用的过程中发现生成的文件中异常信息打印在同一行,看起来极为费劲,所以换成

    93770

    Android-App性能优化

    这些任务是: 1、加载并启动应用程序 2、启动后立即显示应用程序的空白启动窗口 3、创建应用程序进程 当系统为我们创建了应用进程之后,会执行以下的操作: application的初始化 启动UI线程...在暖启动中,系统都会把你的Activity带到前台。...你比如,我用户Back退出应用程序,然后又重新启动,应用程序会再次执行Activity的onCreate(),但会从Bundle(savedInstanceState)获取数据,我们平时应用成勋崩溃,不也是通过该方法保存数据的吗...集合类泄漏 单例/静态变量造成的内存泄漏 匿名内部类/非静态内部类 资源未关闭造成的内存泄漏 解决方式: 比如我们的List集合add()元素之后,会引用着集合元素对象,导致该集合中的元素对象无法被回收...res目录 res 是 resource 的缩写,这个目录存放资源文件,会自动生成对应的 ID 并映射到 .R 文件中,访问直接使用资源 ID。

    2.2K40

    2016 移动应用质量大数据报告

    • 游戏崩溃率远高于应用崩溃率 无论是Android还是iOS,游戏的崩溃率都远高于应用,在iOS中的差异尤为明显。 ? 接下来让我们从Android开始,从多个维度进行应用质量分析。 ?...• 游戏行业崩溃率普遍在4%以上 Android游戏行业崩溃率在4.3%~7.3%之间,八个游戏大类中,角色扮演、经营策略以及网络游戏的崩溃率均在7%以上,休闲益智、体育竞速崩溃率保持在5%以下。...• Android 应用平均ANR率在1%以下 出现ANR将弹出对话框,严重影响用户体验,所以发现应用ANR率上升情况也不容小觑。...• Android应用闪退现象更加严重 相较于2015年, 闪退(启动后0~5s内崩溃)问题占比提升10个百分点(12%提升到22%),Android系统由于其碎片化特征,厂商、机型、系统版本、分辨率等适配问题...iOS主流机型的崩溃率基本保持在2%以下,新机型崩溃率相对更低。iPhone系列机型中,iPhone 4与iPhone 5的崩溃率最高,在3%以上。 ?

    2.4K50

    搭建自己的 crash 监控系统

    根据研究所示: 应用崩溃是手机app用户抱怨最多的额问题 更严重的:如果一个应用连续崩溃3次,大概一半的用户会卸载这个应用 崩溃追踪系统,让开发者能够从用户的设备上收集到每一个导致崩溃的细节,专门用来解决这种应用崩溃问题...是否有那种允许我们在自己服务器部署的崩溃追踪系统?当然有!!...并且会非常容易创建,下面有请Application Crash Reporting on Android (ACRA) 一个允许Android应用自动发送崩溃报告到自己服务器的库。 1....在客户端安装ACRA 首先需要在build.gradle中添加一个(dependency)依赖(使用Android Studio): compile 'ch.acra:acra:4.6.1' 同步你的...最后一步,不要忘记在AndroidManifest.xml中添加网络权限 android:name="android.permission.INTERNET"/> 测试

    1.3K30

    深入Android组件安全攻防(揭秘手Q强制下线提示原理)

    此漏洞的存在允许执行网络钓鱼攻击,以及用户在相关活动中处理的信息泄露。此外,此漏洞允许攻击者修改数据,从而危及其完整性。 轻度劫持 原理: 恶意被第三方程序启动,绕过本身的业务逻辑,造成数据泄露。...主要体现在自己的首页被非法启动,绕过登录界面,导致可直接进行数据浏览和查看,或者携带对本app有害的指令,造成其他问题。 可以参考以前本号发布的安全要点与规范 中权限的描述。..., 虽然很烦人,但用户无法阻止,手机QQ的service在收到推送时 立即在actiivity启动一个用来展示重新登录的透明activity, 用来伪造对话框覆盖在其他activity栈顶。...本地服务在一定程度上节约了资源,由于是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多。主进程被Kill后,服务便会终止。...调用的组件在处理Intent附加数据的时候,没有进行异常捕获,因此当处理空数据、异常或者畸形数据时,导致应用崩溃。

    89910

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

    作者 / Florina Muntenescu, Android Developer Advocate 每一个用户都希望从应用中获得无缝体验。崩溃会导致差评增加、应用卸载,甚至有损品牌认可度。...整体上看,Kotlin 的空安全特性帮助点评 Android 应用将空指针导致的崩溃从日均 3 个降低至 0。...然而,经常会发生忘记实现其中一个方法或者在类中添加新属性时忘记更新。当处理仅用于保存数据的类时,请使用 Kotlin 数据类。...立即使用 Kotlin,降低崩溃率,提高用户满意度,并保持较高的应用评分让您的用户留存和获取始终处于领先地位。...您可以进一步阅读如何 利用 Kotlin 打造更优质的应用,并通过我们的 案例研究 来了解开发者如何从 Kotlin 中获益。

    1.4K10

    Android性能优化(一)

    我们建议您始终根据冷启动的假设进行优化。这样做也可以改善热启动和温启动的性能。 在冷启动开始时,系统有三个任务。这些任务是: 加载并启动应用程序。 启动后立即显示应用程序空白的启动窗口。...启动主题优化 冷启动阶段 : 加载并启动应用程序。 启动后立即显示应用程序空白的启动窗口。 创建应用程序进程。 所谓的主题优化,就是应用程序在冷启动的时候(1~2阶段),设置启动窗口的主题。...,那么就需要从当前要启动的Activity中获取这些信息,并设置到启动窗口中。...在重叠的UI布局中,如果不可见的UI也在做绘制的操作或者后一个控件将前一个控件遮挡,会导致某些像素区域被绘制了多次,从而增加了CPU,GPU的压力。 那么如何找出布局中Overdraw的地方呢?...Android 的两种崩溃: Java 崩溃 Native 崩溃 简单来说,Java 崩溃就是在 Java 代码中,出现了未捕获异常,导致程序异常退出。

    2.7K20

    Android 6.0 权限行为变更详解

    对于以 Android 6.0 或者更高版本为目标平台的应用,务必在运行的时候检查和请求权限(针对一些危险权限)否则,如果直接调用相关需要特殊权限的方法的话,会导致 APP 的崩溃。...这两个方法都是在 API 23 后引入的,也就是说在之前的 API 中是没有这俩方法的。...” /> 如果在清单中列出的权限,不会对用户的隐形或者设备造成太大的风险,这个时候系统会自动给你的应用授权。...但是如果你这样设置的话,在国内的手机上运行还是有问题的(比如小米手机)如果你没有动态申请危险权限,会导致你的 APP 崩溃,也就是说 targetSDKVersion 这个属性对国内的非原生 Android...在需要一些危险权限的时候,必须要向用户动态请求,用户会看到一个系统的对话框,告诉用户这个应用程序需要访问那个权限,让用户选择 拒绝 或者 允许,如果用户拒绝权限请求,则下次应用请求权限的时候,弹出的对话框会增加一个

    93420

    七种方法绕过安卓手机锁屏

    而在 Android智能机中,最常用的安全措施是模式锁定,PIN码或数字密码锁屏。 但是,如果你不小心忘记了你所设置的模式 PIN 或密码的话,那又该怎么办呢?其实,你大可不必担心这个问题。...在关机状态下,我们同时按住音量减键和电源键。此时我们将进入 Android 的 启动程序菜单。按两次音量减键,高亮显示“恢复模式”选项,然后按电源键选中该项。...那么启动进入 安全模式 是最简单的绕过锁屏的方法。 大多数手机可以从锁屏中调出电源菜单,然后长按“关机”选项。...方法7:使锁屏 UI 崩溃 如果,你的设备当前运行的 Android 版本为 Android 5.0-5.1.1 ,你可以尝试使用这种方法来绕过锁屏。这种方法非常的简单,同时也很意思。...最后,当你将足够的字符粘贴到字段中后,你的锁屏 UI 将会崩溃,这时你就可以成功访问到手机的其它界面了!

    5K80

    记一次诡异的Bug修复——App自启动

    当然这是句玩笑,估计用户会直接了当卸载才是真的。 我们项目里确实也有应用保活的策略,但是并不流氓,更不会无厘头的在用户主动关闭App的时候重启。...2、分析 最初进行了两点分析: RD在App退出的方法里加了重启的代码,自测使用却提交到了代码仓库; App崩溃导致的重启,因为项目里有崩溃之后自动重启的逻辑; 但是查看代码之后否定了以上分析: App...退出的方法里没有被修改; 确认应用没有崩溃,而且项目里也有崩溃保护策略,不会无限次、任意时间都可以重启。...反复查看代码逻辑最终定位到有一处判断漏调了注销的方法,导致SplashActivity对象没有被销毁,App杀掉进程之后由于SplashActivity的存在导致应用直接重启。...类如MAT的使用,很容易忘记;但是之前我写过此类文章,因此我直接去找了之前的文章(强势广告来一发:参见《Android性能优化(四)之内存优化实战》一文),很快速的回忆起了使用步骤,很快的定位到了问题。

    54940

    app测试之Monkey-随机事件测试

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试...adb shell monkey -p com.lilysgame.calculatorjw 1000(随机点击1000次) 如不加-p参数,也就是不指定包,随机点击app,所有的app都有可能启动并执行...Activity)导致的异常时,Monkey将停止运行。...使用--throttle参数来控制Monkey每个操作之间的时间间隔,一方面是希望能更接近用户的操作场景,正常用户操作都会有一定的时间间隔;另一方面也是不希望因为过于频繁的操作而导致系统崩溃,尤其是在比较低端的手机上执行测试时...测试时,会因为应用的崩溃或没有响应而意外终止,所以需要在命令中增加限制参数--ignore-crash和--ignore-timeouts,让Monkey在遇到崩溃或没有响应的时候,能在日志中记录相关信息

    86810

    Android逆向|AndroidStudio的两种动态调试技巧

    使用此工具调试的优势在于无需修改寄存器的值类型即可查看对应具体的值,而在jeb中有时修改寄存器值的类型之后,忘记将类型修改回去而继续调试导致程序崩溃。...中android:debuggable="true"。...需要注意的是,我们前几篇文章并未提及修改Androidmanfest.xml中android:debuggable属性值是因为在雷电模拟器中底层已经开启调试模式,在真机中调试的时候我们需要刷机使其始终开启调试模式...,或者每次调试app的时候检查Androidmanfest.xml中android:debuggable属性值,使其为true。...(左键点击) 5.打开雷电模拟器并启动注册机app,然后在cmd命令框输入命令“adbshell ps”查看启动app的进程pid。

    3K20
    领券