Nit*_*tin 13 debugging android breakpoints broadcastreceiver bootcompleted
非常感谢这个网站,我在第一个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>
Run Code Online (Sandbox Code Playgroud)
接收器:
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
}
Run Code Online (Sandbox Code Playgroud)
我的观察 -
1.当我在eclipse上以调试模式运行此应用程序时,断点甚至没有被击中.
2.当我在调试模式下运行其他应用程序时,会暂时触发此断点!但在我继续执行一步一步之前,执行将继续执行.它并不止于此.
我对此行为的推理是 -
1.当我运行其他应用程序时,由于上面的应用程序已经安装,它会捕获启动完成广播,因此断点被点击.(但是为什么执行不会在断点处停止?)
2.当我只运行这个应用程序时,它首先安装,并且在安装所需的时间内,它错过了启动完成广播.
我可以请求下面的查询 -
1.如果不进一步恢复,我如何在断点处停止执行?
2.我可以以某种方式在调试模式下在仿真器上运行已安装的此应用程序版本"无需在每次运行时在模拟器上进行新安装"吗?
还有什么我做错了或错过了什么吗?
请告诉我,因为我真的需要通过onReceive()来调试以捕获更多的应用程序逻辑错误.非常感谢,伙计们.
Lux*_*ode 10
您需要关闭手机并启动它,以便看到onReceive从中调用bootcompleted.要调试它,只需添加一个Log语句onReceive而不是设置断点.否则,你就必须添加一些action到receiver在manifest手动,然后sendBroadcast(new Intent("someName"))与你在指定的名称receiver中的元素manifest.
不知道为什么这个问题被问了很多次,而且很难找到答案,但这对我来说就像一个冠军.
您现在可以像平常一样单步执行代码.玩得开心!
@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";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7040 次 |
| 最近记录: |