当Broadcastreceiver超时发生时,调试器在调试期间断开连接

时间:2012-03-01 13:55:17

标签: android eclipse debugging broadcastreceiver telephonymanager

我正在使用adb / android工具等在eclipse上的模拟器上编写应用程序。 当我在下面调试我的broadcastreceiver代码时,在代码的某个部分,调试器会在我停留几秒钟时分离出来。

它没有给我足够的时间来调试和断开连接,

错误就像

  
      
  • 03-01 20:42:38.293:I / CallListener(320):onReceive .. 03-01 20:42:48.319:W / ActivityManager(59):广播超时
      BroadcastRecord {45098250 android.intent.action.PHONE_STATE} -
      receiver=android.os.BinderProxy@450d2070 03-01 20:42:48.319:
      W / ActivityManager(59):超时期间的接收器:ResolveInfo {45032058
      mahmed.net.apps.CallListener p = 0 o = 0 m = 0x108000} 03-01 20:42:48.353:
      I /处理(59):发送信号。 PID:320 SIG:3 03-01 20:42:48.353:
      I / dalvikvm(320):threadid = 3:对信号作出反应3 03-01 20:42:48.353:   I / dalvikvm(320):将堆栈跟踪写入'/data/anr/traces.txt'03-01

      20:42:48.362:I /处理(59):发送信号。 PID:59 SIG:3 03-01
      20:42:48.362:I / dalvikvm(59):threadid = 3:对信号3作出反应
  •   

调试器断开连接的部分是

if (newCallState.equals(TelephonyManager.EXTRA_STATE_OFFHOOK))
{
    Utils.log(TAG, "off hook...");
    // Do necessary work to start off a service etc ..
    // If I debug here for few seconds the debugger gets detached.. without any errors 
}

broadcastreceiver的完整代码是这样的:

public class CallListener extends BroadcastReceiver 
{
    Context m_context;  
    /**
     * Called on application thread
     */

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Utils.log(TAG, "onReceive..");
        m_context = context;
        String strAction = intent.getAction();

        Assert.assertNotNull(strAction);
        if(strAction.equals(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED))
        {
            handleCallStateChanged(context, intent);
        }       
    }


    private void handleCallStateChanged(Context context, Intent intent)
    {
        Utils.log(TAG, "handling call state changed");
        String newCallState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

        if (newCallState.equals(TelephonyManager.EXTRA_STATE_OFFHOOK))
        {
             Utils.log(TAG, "off hook...");
             // Do necessary work to start off a service etc ..
             // If I debug here for few seconds the debugger gets detached.. without any errors 
        }
    }
}

更多

1 个答案:

答案 0 :(得分:2)

有一个线程有同样的问题: BroadcastReceiver onReceive timeout

复制/粘贴

  

为了防止您的应用在暂停时强行关闭   在调试期间的断点上,尝试安装Dev Tools   应用程序并启用调试应用程序设置:

     
    

允许您选择要调试的应用程序。您无需设置此项     附加调试器,但设置此值有两个影响:

         

如果你暂停一下,它会阻止Android抛出错误     在调试时很长一段时间断点。

  
     

所有细节都在这里:   <击> http://developer.android.com/guide/developing/debug-tasks.html#additionaldebugging

     

如果你在onReceive方法中做了一些复杂的事情,那么   考虑让你的BroadcastReceiver启动一个服务并传递   它从onReceive中获取的数据。然后服务可以做到   加工时间更长。

谷歌的开发者文档链接被破坏了 在这里你有: http://developer.android.com/tools/debugging/debugging-devtools.html