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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...