作者roden (Roden)
看板AndroidDev
标题Fw: [开发] 在不同版本的androidAPP相同性问题
时间Tue Sep 18 23:48:54 2012
※ [本文转录自 Android 看板 #1GM9LQSS ]
作者: roden (Roden) 看板: Android
标题: [开发] 在不同版本的androidAPP相同性问题
时间: Tue Sep 18 23:38:00 2012
Hi 板上的各位好。
想请问一下,
小弟写了一个Android的app,
功能是介面上有个按钮,
按钮被按下後,会startActivityForResult
执行zxing(Google的barcode reader)扫瞄条码,
扫描後,我的app里撰写了onActivityResult去接收和处理扫描到的档案。
此APP在Desire(A8181) Android v2.2.2上执行良好。
不曾发生过错误,
但如果安装到 Android 2.3 或 4.0.4版本的手机上。
就发生错误。
这错误发生时机是:
每当ZXING扫描完条码後,
回到APP的视窗,就跑出APP强制关闭的画面。
错误是:
java.lang.RuntimeException: Unable to resume activity
版本差异导致此问题?
因为本人有将class里的member变数印出来。
在呼叫startActivity之前,member变数是有资料。
但是在onActivityResult时,却memeber变数变成null。
是否Activity被destory?
这问题困扰小弟许久,起初还以为是手机是杂牌的问题。
可以请问板上各位先进,小弟哪边需要做改进才能让APP相容於较新的版本?
资讯若不足,再请告知我一下。
以下是将按钮加上Listener的片段及startActivityForResult的方法,
已去除不相关的程式码。
希望能有先进提供解决的方法或一起讨论。
谢谢各位
以下为程式码。
http://pastebin.com/6HfZQUx8
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 106.65.41.232
1F:→ bestpika:左转 AndroidDev 09/18 23:42
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: roden (106.65.41.232), 时间: 09/18/2012 23:48:54
2F:→ cooper6334:需要的资讯是Crash时LogCat喷的讯息阿 09/19 08:15
3F:→ roden:小弟不才 问题已经解决 稍晚将问题点提供出来 个人错误 09/19 09:45
4F:→ roden:本以为问题已经解决,但还是相同问题。是否有先进可协助? 09/19 12:20
5F:推 cooper6334:LogCat里通常会有一行Caused by:xxxExcaption 09/19 18:56
6F:→ cooper6334:下面是发生的位置,这个才是判断的重点 09/19 18:56
7F:→ Eior:猜是gc把某个物件清掉了 从这个方向找吧 09/19 22:46
8F:推 sdyy:你的CURRENTWEBPAGE是几时赋值阿? 09/19 23:50
CURRENTPAGE是在网页换页後马上赋值。现在发现是parent
Activity整个被gc,因为在onActivityResult呼叫前有执行
onCreate。这应该是ram不够导致。但就算是把变数存到SharePreference
里,也许能保存下来。
但是layout中的webview就算recreate後,
他本身的session id 也会有差异。
因为我在旧的Webview中已经有登入的record,
这样我将扫描到的资讯送到网站後,
他会在要求我在登入一次。
有先进有遇过这问题嘛?
希望能够强制把parent activity给保留下来。
或者能提供一些solution给我呢?
--------------------------------------------
2012/09/22 Solved
问题已经解决了。
原本我APP是去呼叫外部的ZXING,
也就是说是我没将ZXING包在自己的APP。
虽然ZXING包不包在自己的APP里,
在使用startActivityForResult都能呼叫成功。
但对於作业系统有一个很大的差异。
在没将ZXING(外部程式)包进APP(Parent APP)的状况下,
由於作业系统会认为你的APP(Parent APP)是去呼叫外部程式,
於是,当APP运行在手机规格差的环境上,
在记忆体不足的状况下,
OS会将其他的Activity(包含Parent APP)GC掉。
等到ZXING(外部程式)运行完毕,
再执行parent APP 的 onActivityResult时,
由於OS知道parent APP不存在,
故会去呼叫onCreate将parent APP建立起来,
这样的话,原本的global variable也会化为初始值。
进而导致可能有一些exception发生。
若将ZXING(外部程式)包在APP里,
在记忆体不足的环境下,
作业系统会认为我的APP(Parent APP)和ZXING(外部程式)是同一个程式,
它会优先将其他的ActivityGC掉,
但GC完後,记忆体仍然不足,
作业系统仍将会跳出整个APP。
这样就只能请使用者换手机拉。
若有其他先进有不同的看法或意见,也欢迎一起讨论!
※ 编辑: roden 来自: 39.8.11.82 (09/22 23:57)