最近遇到了一个android的显示Display_TEXT的bug,首先手机支持热插拔,第一插入SIM卡,Toast界面显示尊敬的用户,欢迎你,然后按home键,Toast界面消失,然后拔出SIM卡再插入SIM卡,发现不能弹出Toast界面了,而且STK业务也不能使用了。

    首先我们来整理下该问题,我们分为两个测试场景:

    场景一:开机后我们插入SIM卡,弹出显示Display_TEXT的Toast.点击确定。然后拔出SIM卡,再插入SIM卡,还能弹出Display_TEXT的Toast.

    场景二:开机后我们插入SIM卡,弹出显示Display_TEXT的Toast,按下home键,然后拔出SIM卡,再插入SIM卡,不能弹出Display_TEXT的Toast.

   对比分析场景一和场景二。我们可以找出解决该问题的思路来。两个测试场景的差异的在于场景一在第一次弹出显示Display_TEXT的Toast是点击确定,场景二在第一次弹出显示Display_TEXT的Toast的时候,按下home键。所以问题就出在这儿了。所以我们就猜测点击确定按钮和按home键,代码走不通的流程,而且点击home键后代码流程有bug。

     显示Display_TEXT的Toast就是STKDialogActivity.java。我们首先查看下该类:该类继承了Activity类并实现了View.OnClickListener的接口。如果对java熟悉的话,就是知道View.OnClickListener接口中的onClick()函数就是点击Toast界面的确定和取消按钮触发的函数。OnClick()函数如下图:

 

   

      从代码中我们可以看出点击确定按钮的时候先调用了CancelTimeOut()函数,然后调用sendResponse给STK service回复了确定消息。那么当我们按下Home键的时候,STKDialogActivity.java执行的是哪个函数呢。首先我们看下google对Activity生命周期的定义,如下图所示:

     

           

           当我们按下home键的时候,STKDialogActivity从界面消失了,从上图我们可以看出,此时STKDialogActivity必然调用了onPause(),但是在onPause()函数中没有调用sendResponse给STK service回复了确定消息给STK service回复确定消息。所以我们猜测问题就出在这了,我们在onPause()函数中把调用sendResponse的代码加上,进行测试。果然问题解决了。为什么在onPause()函数没有调用sendResponse函数给STK service回复消息,会造成此问题。本人现在正在分析,后续会在该文章中补上。

更多相关文章

  1. C语言函数的递归(上)
  2. Android强行进阶—按键事件&焦点事件攻略
  3. Android关于ListView中的getItemViewType与getViewTypeCount
  4. Android(安卓)Camera Framework Stream(一)
  5. Android中invalidate()和postInvalidate() 的区别
  6. Android界面设计学习日志(一)
  7. Bionic C
  8. Android(安卓)Binder机制学习笔记之一
  9. Android通过百度地图API用Service和Alarm在后台定时获取地理位置

随机推荐

  1. android五种布局-霓虹灯效果实现
  2. 多媒体文件信息
  3. Android中文程序员向导教材目录
  4. [Android]Uri、UriMatcher、ContentUris
  5. 如何获取Android源码
  6. 看Google官方的Android开发文档的一些收
  7. Android项目开发完成以后就要将android项
  8. Android之GridView简单说明
  9. Android 自定义View——自定义View控件
  10. Android排版和POI