onDestroy强制退出后,process crash的处理

一般情况,我们在执行测试的过程中都会调用tearDwon方法,以Robotium为例,我们在tearDown()方法中会执行solo.finishOpenedActivities()方法。

有时候会发现当执行到这的时候,莫名的Process Crash了。后来仔细看了下finishOpenedActivities的源码,得出:执行该方法的时候会调用Instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK)。这就表明可能我们被测试的Activity可能会先执行完它的onStop和onDestroy方法。正常情况下是不会出现问题的,但是不正常的情况是我们的开发会做一些“额外”的操作。比如在onDestroy()方法中添加如下代码:

android.os.Process.killProcess(android.os.Process.myPid());

System.exit(0);

这就使得应用程序会主动的kill掉自己的进程,因为我们的测试程序也是运行在这个进程中的。所以,就悲剧了。

遇到这种情况的时候,记得主动在tearDown方法中去掉任何可能销毁当前Activity的代码,如去掉solo.finishOpenedActivities这个,就没有问题了。

@Override
protected void tearDown() throws Exception {
// Finish the Activity off (unless was never launched anyway)
Activity a = super.getActivity();
if (a != null) {
a.finish();
setActivity(null);
}
scrubClass(ActivityInstrumentationTestCase2.class);

super.tearDown();

}

这是tearDown()的源码,可以清晰的看到这里面执行了Activity的finish()方法,执行完后我们的测试程序就结束了。 Activity的finish()执行完后,此时Activity的状态先更改为onPause,然后待系统继续销毁Activity。

转自 http://www.robotium.cn/archives/915

时间: 2024-08-04 00:01:44

onDestroy强制退出后,process crash的处理的相关文章

APP闪退分析及Crash日志获取

现在人们越来越离不开手机了,手机已经是我们生活的一部分了.APP也越来越多,要想让自己的APP脱颖而出,能在移动互联网时代能有一席之地,除了能满足大多数用户的刚需之外,也要让自己APP的体验做到最佳.所以APP闪退可能会导致用户的流失,所以作为研发.测试人员应该把APP的crash率降到最低.所以在测试的过程中也要特别注意闪退. 说了那么多,那么尤其对于测试人员来说,遇到crash(或偶发)应该怎么办呢?必须要把日志抓取出来,这里以Android为例: 一.手机crash之后,如果弹出的"应用程

当程序退出后,动态申请的内存会自动释放吗

stackoverflow有人问了这么一个问题,下面这段程序执行完毕后,malloc的内存会释放吗 [cpp] view plain copy <span style="font-size:18px;">int main () { int *p = malloc(10 * sizeof *p); *p = 42; return 0;  //Exiting without freeing the allocated memory }</span> 赞数最多的这么回

当前用户退出后,点击浏览器后退按钮,原来的用户又显示出来,怎么办?

我在工作就遇到了这样的问题,一同事的解决方法: 我们在jsp页面都引用了一个公共的jsp文件 <% response.setHeader("Cache-Control","no-store");    response.setHeader("Pragma","no-cache");    response.setDateHeader ("Expires", 0);%> 这样用户再退出后在回退时就

9.两个应用部署在同一个服务器中,处理串用session_id的问题(如果设置了拦截器,其中一个应用退出后,另一个也会被退出)

公司有两个浏览器的应用,都部署的同一服务器的不同端口上.后发现,我同时登陆两个系统,然后退出其中一个,另一个也会跟着被退出.我猜测应该是cookie或者session的问题,于是试着修改cookie中两个应用相同的字段名,修改拦截器中的验证字段.但是都没有效果,后来再网上找到一篇处理此问题类似的博文,于是照着方法做了调整成功处理.于是在此做下记录. 一.分析问题(本人比较菜,如有不对的地方请指正): 由于http连接是无状态的,所以我们需要一个独一无二的标识来标志每个用户的登录状态,这样就能在跳

强制关闭虚拟机后问题+解决

提示大概就是Vmware提示以独占方式锁定此配置文件失败,镇定查了查,理解好像就是字面意思,因为上一个进程没结束导致的程序锁死问题. 然后我开始找大家试过的解决方案,总结来说主要分为两大派: 1.打开任务资源管理器,暴力结束所有 VMware 相关进程 2.(或)删除Ubuntu安装目录下所有 .lck 的文件和文件夹 注:必要的时候重启计算机 解决的心路历程: 先看一看“任务管理器”里面运行着的所有带着 VMware 的进程,全部暴力终止:再删除 Ubuntu 目录下面的所有 .ick 文件,

Cornerstone 相关

1. 添加远程仓库(这里并不能把所有的代码,下载到本地.你可以查看,远程仓库上的代码) 2.添加,远程代码仓库 之后 3.将仓库上的代码,下载到本地 完成之后,本地文件夹,就会有,仓库上的代码了,就是这样了 4.创建一个新的xcode工程 5.如果这样 如果更新,会有问题出现.如下, 之后会出现这个,就是问题 解决了(A,代表添加到本地仓库了,等待提交) 下面,将我们的代码,提交到远程代码仓库 (如果,创建完代码后,你选择了更新,cornerstone 会出现如下错误,解决方法,强制退出corn

Linux系统中如何进入退出vim编辑器,方法及区别

在linux中,vim编辑器是系统自带的文本编辑器,其功能强大.这个VIM(VI)是很简单的.注意:linux命令要小写!VIM编辑器,可以新建文件也可以修改文件,命令为:vim  /usr/local/con.cfg 如果这个文件,以前是没有的,则为新建,输入命令点击回车后下方有提示为新文件.如果文件已存在,则没有提示.进入编辑器后,先按"I",即切换到"插入"状态.就可以通过上下左右移动光标,或空格.退格及回车等进行编辑内容了,和WINDOWS是一样的了.退出v

如何建立和运行vue项目

第一步,肯定是安装node.js.根据需要下载安装,安装后如图,然后进行下一步 打开命令提示符(win+r),然后进行下一步: node -v 检查node是否安装成功 npm -v 检查npm是否安装成功 cnpm -v 是否安装成功 安装cnpm,由于npm有些资源被屏蔽,儿有些是国外资源的原因, 会导致安装依赖的时候失败,这里安装cnpm国内镜像.输入如下命令: npm install -g cnpm --registry=http://registry.npm.taobao.org.然后

centOS7.3新安装后,设置IP,以及Putty远程和Xshell远程 (学习是个持续的过程,也许中途放松过,但是仍然能重新捡起来,并学以致用,方为真勇士)

有一段时间没有写学习心得了:现在开始加油,再接再励. 从最基础的开始 1.安装centOS7.3之后设置IP地址.一般linux的系统都是作为服务器的系统来使用,服务器的属性注定了他的IP不能随意的更变,所以需要设置一个固定的IP地址. 一般centos系统安装完成后,IP都是通过dhcp来获得的.所以我们需要改变它的IP地址获取方式,以及设置一个静态的IP地址. 每一个系统的版本网卡的名字都不一定一样,比如centOS7.0系统之前的版面网卡就是eth0之类 "vi"是centOS