13

このサイトのおかげで、私は最初のAndroidプロジェクトで大きな進歩を遂げました。

起動が完了したレシーバーのonReceive()メソッドで実行を一時停止しようとしています。以下は私のマニフェストとレシーバーコードです。

Android 2.3.3API
- 10IDE- エミュレータで実行されている
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でデバッグモードで実行すると、ブレークポイントに到達することすらありません。
2.デバッグモードで他のアプリケーションを実行すると、このブレークポイントが瞬間的に発生します。しかし、段階的に実行を進める前に、実行が再開されます。それだけではありません。

この動作の理由は次のとおりです。-
1。他のアプリケーションを実行すると、上記のアプリは既にインストールされているため、ブート完了ブロードキャストをキャッチし、ブレークポイントに到達します。(しかし、なぜブレークポイントで実行が停止しないのですか?)
2.このアプリのみを実行すると、最初にインストールされ、インストールにかかる時間で、起動完了ブロードキャストが失われます。

以下のクエリについてサポートをお願いします
。1。ブレークポイントで実行を再開せずに、実行を停止させるにはどうすればよいですか。
2.エミュレータを実行するたびに、エミュレータで「新しくインストールすることなく」デバッグモードで、このアプリのインストール済みバージョンをエミュレータで実行できますか?
3.他に何か間違っていることや何かが足りないことはありますか?

アプリケーションロジックのバグをさらにキャッチするには、onReceive()を介してデバッグする必要があるため、お知らせください。どうもありがとう、皆さん。

4

4 に答える 4

10

onReceiveがから呼び出されるのを確認するには、電話をシャットダウンして起動する必要がありますbootcompleted。これをデバッグするには、ブレークポイントを設定する代わりに、にLogステートメントを追加するだけです。onReceiveそれ以外の場合は、にいくつかを追加してactionから、の要素で指定した名前を手動でreceiver追加する必要があります。manifestsendBroadcast(new Intent("someName"))receivermanifest

于 2011-11-16T03:09:17.350 に答える
9

なぜこの質問が何度も聞かれ、答えを見つけるのがとても難しいのかわかりませんが、これは私にとってチャンピオンのように機能します.

  1. onReceive() オーバーライド内のレシーバー クラスで、最初の呼び出しとして以下の waitForDebugger() の呼び出しを追加します。
  2. アプリを実行してデバイスにデプロイします。
  3. 更新された apk がデバイスに配置されたら、デバイスを再起動します。
  4. デバイスの再起動中に IDE (この例では Android Studio 1.4) に戻り、[実行] メニュー > [デバッガーを Android プロセスにアタッチ] に移動します。
  5. 「すべてのプロセスを表示する」にチェックを入れます。
  6. 待って... waitForDebugger() 行にヒットすると、アプリ/パッケージがこのリストに表示されます。私の場合、デバイスの再起動後、少なくとも 2 分かかりました。
  7. [OK] をクリックしてしばらく待つと、ブレークポイントがヒットします。

これで、通常どおりコードをステップ実行できます。楽しむ!

@Override
public void onReceive(Context context, Intent intent) {

    // Add this at beginning of method
    android.os.Debug.waitForDebugger();

    // Place breakpoint below
    String myVariable = "Some Value";

}
于 2015-10-24T01:52:40.637 に答える
2

デバッガーを停止するコードの前に、次の行を使用します。

android.os.Debug.waitForDebugger();
于 2014-01-22T08:29:04.060 に答える