项目运行中的新发现

项目: TFTD

今天在Nook Tablet上面测试背景音乐的问题,往复N次发现,app 会crash. 报出的exception是: 数据越界,

06-01 00:48:53.037: E/AndroidRuntime(6180): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0

06-01 00:48:53.037: E/AndroidRuntime(6180): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)

06-01 00:48:53.037: E/AndroidRuntime(6180): at java.util.ArrayList.get(ArrayList.java:311)

06-01 00:48:53.037: E/AndroidRuntime(6180): at com.xxx.application.TFTDApplication.setBooleanFavorite(TFTDApplication.java:489)

06-01 00:48:53.037: E/AndroidRuntime(6180): at com.xxx.activity.ThoughtsActivity.onResume(ThoughtsActivity.java:364)

06-01 00:48:53.037: E/AndroidRuntime(6180): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)

06-01 00:48:53.037: E/AndroidRuntime(6180): at android.app.Activity.performResume(Activity.java:3839)

06-01 00:48:53.037: E/AndroidRuntime(6180): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2110)

06-01 00:48:53.037: E/AndroidRuntime(6180): ... 19 more



究其原因是在后一个activity的onResume()方法中与前一个activity异步的加载数据的代码块共用了一个数据集合对象,导致数据越界,这个问题找了好久好久,都没有发现,

现在终于明白了,一直想不明白为什么,明明打印出来是size == 3, 为什么用for循环取的时候还是会越界。


终于发现了,为什么会前面一个activity会再次运行呢?明明已经创建过了,为什么还会再次onCreate()?不明白,为什么这个问题在Nook Tablet上出现了,在手机端不易出现。


找了好久,终于发现:这跟你用什么方式来打开app有关系。


在手机上,我一般都是从桌面直接点击打来,或者直接在app里直接打开。


这次在Nook Tablet上面我其实是通过文件浏览器打开的,我使用了Search功能,找到后直接点击。我发现这个点击操作其实是重新发出了一个intent,导致这个activity会重新创建运行,而并不管这个app是否已经运行了,activity是否已经存在实例了。对于那些在处在后台的app也重新创新一个新的activity打开。

我又在手机端,使用search功能找到我的app,点击,发现我的app中的activity也会重新onCreate()。


因此activity重新onCreate()一下。


测试方法:

      1. 看看TFTDApplication 的onCreate()方法是不是重新执行了 ===》 false

      2. 看看MyTabActivity 的onCreate()方法是不是重新执行了 ===》 true

      3. 看看ThoughtsActivity 的onCreate()方法是不是重新执行了 ===》 true


当然这个也跟你的Activity创建方式的设置有关系!!!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值