android – 通过onReceive()在启动完成的接收器无法调试

前端之家收集整理的这篇文章主要介绍了android – 通过onReceive()在启动完成的接收器无法调试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
感谢这个网站,我已经取得了重大进展,我的第一个 Android项目.

我试图在启动完成的接收器的onReceive()方法中使执行挂起.以下是我的清单和接收器代码.

Android 2.3.3
API – 10
IDE – Eclipse
在模拟器上运行

表现:

<?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.demo.notepad3" >

<uses-sdk android:minSdkVersion="10" />

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application android:icon="@drawable/icon" >
    <activity
        android:label="@string/app_name"
        android:name=".ProjectTrackerHomeActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".ProjectTrackerEditActivity" />

    <receiver android:name=".ProjectTrackerNotification" />

    <receiver
        android:name=".ProjectTrackerOnBootReceiver" >
        <intent-filter >
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
</application>

</manifest>

接收器:

public class ProjectTrackerOnBootReceiver extends BroadcastReceiver {
private ProjectTrackerDBAdapter mDbHelper;

@Override
public void onReceive(Context context,Intent intent) {
    Debug.waitForDebugger();
    AlarmManager
              mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

              //I place the break point at line 2,the alarm manager line

             // Further code,irrelevant
    }

我的观察-1.当我在eclipse上以调试模式运行这个应用程序时,断点甚至没有打.当我在调试模式下运行一些其他应用程序时,这个断点会立刻被击中!但在我可以继续执行之前,执行恢复.它不止于此.

我的这个行为的推理是-1.当我运行其他应用程序时,由于上面的应用程序已经安装,它会捕获引导完成广播,因此断点被击中. (但为什么执行停止在断点?)2.当我仅运行这个应用程序时,它首先被安装,并且在安装所需的时间内,它错过了引导完成广播.

我可以用以下查询1获得一些帮助.如果没有进一步恢复,我该如何在断点停止执行?每次运行它时,我可以在仿真器中以调试模式运行已经安装的这个应用程序的版本,而不需要在仿真器上安装新的?
还有什么我做错了还是缺少什​​么?

请允许我知道,因为我真的需要调试onReceive()来捕获进一步的应用程序逻辑错误.非常感谢,人们.

解决方法

你需要关闭手机并启动它,以免从bootcompleted看到onReceive被调用.要调试这个,只需在onReceive中添加一个Log语句,而不是设置一个断点.否则,您必须向清单中的接收方添加一些操作,然后使用您在清单中的接收器元素中指定的名称手动sendBroadcast(new Intent(“someName”)).

猜你在找的Android相关文章