关于Activity back 无响应提示ANR 与onStop,onDestory不执行的问题

最近写项目,遇到一个特蛋疼的问题,先记录下,哪位大牛知道原因,还请指导下。

案例场景:

app呼叫,提交http请求到后台,后台回拨电话下来,服务里面自动接听,不显示系统通话界面,app界面显示通话时长,若回到桌面或者在其他应该界面,则用悬浮窗去显示通话时长。

BUG:

1.按back键,提示phone应用 ANR。

这个bug知道问题在那,因为不让显示系统通话界面,又不要过多的改动系统phone源码,所以,在phone应用添加了一个私有广播,当监听到来电了,就发送广播给phone应用,调用对应的 接听键调用的方法,接听。挂断,也发送广播调用,对应的 挂断键 调用的方法。同时为了不显示系统通话界面,我把InCallScreen 的them设置为 Theme.NoDisplay。

而刚好,这个bug,就出现在这个Theme.NoDisplay上。当一个activity的them为Theme.NoDisplay时,点击back键,就会出现ANR的问题。现在还不知道具体原因。

于是,我在接听了后,又发送了一个广播,调用phone的 finish方法,以解决这个问题。

2.按back键,onStop,onDestory不执行。

按back键,onPause调用了,但是onStop 与onDestroy没有调用,导致我 在onStop时通知服务去显示 浮窗 的代码没有执行,而且,打印的log也相当诡异。back键后,activity不存在了,只调用了onPause,但是,再次进入的时候,会走onCreate,同时后面也打印了onStop与onDestroy,但是activity还在,浮窗也出来了。然后再次back后,activity与浮窗的交互流程就正常了。如果不back,直接按home键,流程也是正常的。

为了解决这个bug,我重写了onKeyDown,让back时候,回到桌面,类似home键。

我的activity的 android:launchMode="singleInstance" ,会不会和这个属性有关?现在bug多,没太多时间仔细研究,暂时记录下。

下面附上 log,看看诡异的流程吧。


添加了一下注释,去掉了一下无关的lgo

-----启动activity----
01-10 16:48:22.958: I/MainActivity(20504): --onCreate--
01-10 16:48:22.998: I/MainActivity(20504): --onStart--
01-10 16:48:22.998: I/MainActivity(20504): --onResume--
01-10 16:48:22.998: I/System.out(20504): 0
01-10 16:48:23.008: I/NavigationService(20504): --onStartCommand--IDEL--
01-10 16:48:23.008: I/MainActivity(20504): --onServiceConnected--
01-10 16:48:23.008: I/MainActivity(20504): --invokeService not null  and registeCallBack&getCurrentInfo--
01-10 16:48:23.008: I/NavigationService(20504): --registeCallBack--

01-10 16:48:23.078: I/NavigationService(20504): --分发MSG到 activity--

----来电------
01-10 16:48:41.538: I/NavigationService(20504): --来电铃声--
01-10 16:48:41.628: I/NavigationService(20504): ----发送-接听-广播----
----phone应用启动,导致activity失去焦点----
01-10 16:48:42.058: I/MainActivity(20504): --onPause--
01-10 16:48:42.618: I/NavigationService(20504): --CALL_STATE_OFFHOOK 接听来电--
----finish phone界面----
01-10 16:48:42.618: I/NavigationService(20504): --sendBackToPhone--
01-10 16:48:42.668: I/MainActivity(20504): --startCalling--
01-10 16:48:42.688: I/MainActivity(20504): --updateTime--time_begin=2982502--
-----activity 重拾焦点----
01-10 16:48:42.938: I/MainActivity(20504): --onResume--
01-10 16:48:42.938: I/System.out(20504): 0

01-10 16:48:42.948: I/NavigationService(20504): --activityShowStateChange--isShow=true--callState=CALLING--
01-10 16:48:42.948: I/NavigationService(20504): --分发MSG到 activity--

-----按下back键-----回到前面的界面--可是浮窗没有出来--
01-10 16:48:48.328: I/MainActivity(20504): --onKeyDown event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=2988157, downTime=2988157, deviceId=-1, source=0x101 }--
01-10 16:48:48.388: I/MainActivity(20504): --onBackPressed--
01-10 16:48:48.458: I/MainActivity(20504): --onPause--
-----为何只到onPause???
01-10 16:48:48.748: I/MainActivity(20504): --updateTime--time_begin=2982502--
01-10 16:48:49.748: I/MainActivity(20504): --updateTime--time_begin=2982502--
01-10 16:48:50.748: I/MainActivity(20504): --updateTime--time_begin=2982502--
01-10 16:48:51.748: I/MainActivity(20504): --updateTime--time_begin=2982502--
01-10 16:48:52.748: I/MainActivity(20504): --updateTime--time_begin=2982502--

----再次启动Activity----activity 与 浮窗同时出现--bug 啊

01-10 16:48:53.158: I/MainActivity(20504): --onCreate--
01-10 16:48:53.208: I/MainActivity(20504): --onStart--
01-10 16:48:53.208: I/MainActivity(20504): --onResume--
01-10 16:48:53.208: I/System.out(20504): 0
01-10 16:48:53.218: I/NavigationService(20504): --onStartCommand--CALLING--
01-10 16:48:53.218: I/MainActivity(20504): --onServiceConnected--
01-10 16:48:53.218: I/MainActivity(20504): --invokeService not null  and registeCallBack&getCurrentInfo--
01-10 16:48:53.218: I/NavigationService(20504): --registeCallBack--
01-10 16:48:53.278: I/MainActivity(20504): --handleMessage--msg=7--
01-10 16:48:53.278: I/NavigationService(20504): --activityShowStateChange--isShow=true--callState=CALLING--
01-10 16:48:53.278: I/NavigationService(20504): --分发MSG到 activity--
01-10 16:48:53.278: I/NavigationService(20504): --关闭显示的浮框--
01-10 16:48:53.278: I/CallingFrontView(20504): --sIdel--
01-10 16:48:53.278: I/CallingFrontView(20504): --closeFrontView--
01-10 16:48:53.278: I/NavigationService(20504): --dispatchSrvMsgToView--SvrState=CALLING--
01-10 16:48:53.278: I/MainActivity(20504): --sCalling--
01-10 16:48:53.278: I/MainActivity(20504): --updateTime--time_begin=2982502--
01-10 16:48:53.278: I/NavigationService(20504): --getCurrentInfo--
01-10 16:48:53.278: I/NavigationService(20504): --dispatchSrvMsgToView--SvrState=CALLING--
01-10 16:48:53.278: I/MainActivity(20504): --sCalling--
01-10 16:48:53.278: I/MainActivity(20504): --updateTime--time_begin=2982502--

-----为何还会接着调用 onStop和onDestroy,没有onPause,而且测试Activity还显示着,由于这个,导致浮窗与Activity一起出现了--
01-10 16:48:53.738: I/MainActivity(20504): --onStop--
01-10 16:48:53.738: I/MainActivity(20504): --onDestroy--
01-10 16:48:53.778: I/MainActivity(20504): --handleMessage--msg=6--
01-10 16:48:53.778: I/NavigationService(20504): --activityShowStateChange--isShow=false--callState=CALLING--
01-10 16:48:53.778: I/NavigationService(20504): --分发MSG到 浮窗--
01-10 16:48:53.778: I/NavigationService(20504): --dispatchSrvMsgToView--SvrState=CALLING--
01-10 16:48:53.788: I/CallingFrontView(20504): --updateContentView vState=SHOWING--
01-10 16:49:01.758: I/MainActivity(20504): --onKeyDown event=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=3001583, downTime=3001583, deviceId=-1, source=0x101 }--
01-10 16:49:01.878: I/MainActivity(20504): --onBackPressed--
01-10 16:49:01.948: I/MainActivity(20504): --onPause--
01-10 16:49:02.438: I/MainActivity(20504): --onStop--
01-10 16:49:02.438: I/MainActivity(20504): --onDestroy--

在网上看到这个哥们的问题,跟我的有几分类似,是不是我的Activity也透明了?可是我验证了下他说的情况,并没有出现。

http://blog.sina.com.cn/s/blog_601cbd070100npf8.html#post

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值