我正在调试我制作的Android主屏幕小部件应用程序。当按下小部件上的按钮时,调试器启动,然后它就从VM断开连接。没有给出任何原因。我使用的是Windows 10。
日志上是这么说的:
D/Atlas: Validating map... D/libEGL: loaded
/system/lib/egl/libEGL_emulation.so D/libEGL: loaded
/system/lib/egl/libGLESv1_CM_emulation.so D/libEGL: loaded
/system/lib/egl/libGLESv2_emulation.so
D/ ] HostConnection::get() New Host Connection established 0xef0394f0, tid 3709
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Enabling debug mode 0 W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xef1485e0, error=EGL_SUCCESS
D/roboguice.RoboGuice: Using annotation database(s).
D/roboguice.RoboGuice: Using annotation database(s) : [, roboguice]
D/roboguice.RoboGuice: Time spent loading annotation databases : 21
W/art: Verification of com.gdbd.geedeebeedee.model.GdbdWidgetRecord
com.gdbd.geedeebeedee.model.GdbdWidgetRecordsRealmImpl.create(java.util.Date) took 127.878ms
W/art: Verification of com.gdbd.geedeebeedee.model.GdbdWidgetRecord
com.gdbd.geedeebeedee.model.GdbdWidgetRecordsRealmImpl.getTodaysRecord() took 111.586ms
D/GdbdWidgetBase: Received intent: android.appwidget.action.APPWIDGET_ENABLED
D/GdbdWidgetBase: Updating widget index: 0 with id: 23
D/GdbdWidgetBase: Received intent: android.appwidget.action.APPWIDGET_UPDATE
D/GdbdWidgetBase: Received intent: android.appwidget.action.APPWIDGET_UPDATE_OPTIONS
D/GdbdWidgetBase: Received intent: change_day_staus
I/art: Thread[5,tid=3470,WaitingInMainSignalCatcherLoop,Thread*=0xf3c30c00,
peer=0x22c0a0a0,"Signal Catcher"]: reacting to signal 3
I/art: Wrote stack traces to '/data/anr/traces.txt'
Disconnected from the target VM, address: 'localhost:8619', transport: 'socket'
我也拉了traces.txt,但没有发现任何明显的错误信息。也许我不知道该找什么。当第一次把小部件放在屏幕上时,调试器没有断开连接。官方的模拟器和GenyMotion都有这种情况。模拟器是Google Nexus 5 5.1.0 API 22。
以下是Gradle构建设置:
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.gdbd.geedeebeedee"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
} }
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile group: 'com.google.code.gson', name: 'gson', version: '2.3.1'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
testCompile 'junit:junit:4.12' }
有人知道发生了什么事吗?为什么我不能调试?谢谢。
- 编辑1:**
很明显这个过程已经结束了。
D/OpenGLRenderer: Enabling debug mode 0
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xf3ff6900, error=EGL_SUCCESS
D/roboguice.RoboGuice: Using annotation database(s).
D/roboguice.RoboGuice: Using annotation database(s) : [, roboguice]
D/roboguice.RoboGuice: Time spent loading annotation databases : 19
80: 80 D/ ] Socket deconnection
D/GdbdWidgetBase: Received intent: change_day_staus
80: 80 D/ ] Socket deconnection
80: 80 D/ ] Socket deconnection
80: 80 D/ ] Socket deconnection
80: 80 D/ ] Socket deconnection
I/art: Thread[5,tid=13474,WaitingInMainSignalCatcherLoop,Thread*=0xf3c30c00,
peer=0x12c0a0a0,"Signal Catcher"]: reacting to signal 3
I/art: Wrote stack traces to '/data/anr/traces.txt'
- 编辑2**添加Android清单文件
'
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="roboguice.modules"
android:value="com.gdbd.geedeebeedee.model.ModelModule" />
<activity
android:name=".activity.StatsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".widget.GdbdWidgetBase" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<intent-filter>
<action android:name="change_day_staus" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/gdbd_widget_info" />
</receiver>
</application>
'
- 编辑3**轨迹. txt https://ufile.io/c41eb
- 编辑4**GdbdWidgetBase
@Inject
GdbdWidgetRecords gdbdWidgetRecords;
public void onHandleUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// Perform this loop procedure for each App Widget that belongs to this provider
for (int widgetIndex = 0; widgetIndex < appWidgetIds.length; widgetIndex++) {
int widgetId = appWidgetIds[widgetIndex];
Log.d(TAG, "Updating widget index: " + widgetIndex + " with id: " + widgetId);
GdbdWidgetRecord todaysRecord = gdbdWidgetRecords.getTodaysRecord();
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.gdbd_widget);
if(todaysRecord.getCurrentStatus() == DayStatus.GOODDAY)
views.setImageViewResource(R.id.btnClicker, R.drawable.ic_gd);
else if(todaysRecord.getCurrentStatus() == DayStatus.BADDAY)
views.setImageViewResource(R.id.btnClicker, R.drawable.ic_bd);
else if(todaysRecord.getCurrentStatus() == DayStatus.NOTSET)
views.setImageViewResource(R.id.btnClicker, R.drawable.ic_undecided);
Intent intent = new Intent(context, GdbdWidgetBase.class);
intent.setAction(CHANGE_DAY_STATUS);
intent.putExtra(WIDGET_ID_EXTRA, widgetId);
PendingIntent changeStatusIntent = PendingIntent.getBroadcast(context, widgetId, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
views.setOnClickPendingIntent(R.id.btnClicker, changeStatusIntent);
scheduleUpdateAtMidnight(context, widgetId);
appWidgetManager.updateAppWidget(widgetId, views);
}
}
@Override
public void onHandleReceived(Context context, Intent intent) {
Log.d(TAG, "Received intent: " + intent.getAction());
//Log.d(TAG,"getDebugUnregister: " + (getDebugUnregister()?"true":"false"));
if (CHANGE_DAY_STATUS.equals(intent.getAction())) {
int appWidgetId = intent.getIntExtra(WIDGET_ID_EXTRA, -1);
if (appWidgetId >= 0) {
GdbdWidgetRecord todaysRecord = gdbdWidgetRecords.getTodaysRecord();
Log.d(TAG, "today record: " + todaysRecord.toString());
DayStatus newDayStatus = DayStatus.NOTSET;
if(todaysRecord.getCurrentStatus() == DayStatus.NOTSET)
newDayStatus = DayStatus.GOODDAY;
else if(todaysRecord.getCurrentStatus() == DayStatus.GOODDAY)
newDayStatus = DayStatus.BADDAY;
else if(todaysRecord.getCurrentStatus() == DayStatus.GOODDAY)
newDayStatus = DayStatus.NOTSET;
Log.d(TAG, "newDayStatus: " + newDayStatus);
gdbdWidgetRecords.changeTodaysStatus(newDayStatus);
onHandleUpdate(context, AppWidgetManager.getInstance(context), new int[]{appWidgetId});
}
}
}
private void scheduleUpdateAtMidnight(Context context, int widgetId) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.SECOND, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.add(Calendar.DAY_OF_YEAR, 1);
Intent updateAtMidnightIntent = new Intent(context, GdbdWidgetBase.class);
updateAtMidnightIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
updateAtMidnightIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]{widgetId});
PendingIntent broadcastIntent = PendingIntent.getBroadcast(context, widgetId + 1,
updateAtMidnightIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcastIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcastIntent);
}
}
- Edit 5**断点始终位于我的AppWidget的onReceive()方法中。对于android. appwidget. action. APPWIDGET_ENABLED等其他Intent,调试器停止之前需要更多时间,但我的应用仍会停止运行
01-09 22:28:20.861 3881-3881/com.gdbd.geedeebeedee D/GdbdWidget: Received intent: android.appwidget.action.APPWIDGET_ENABLED
01-09 22:29:20.854 3881-3886/com.gdbd.geedeebeedee I/art: Thread[2,tid=3886,WaitingInMainSignalCatcherLoop,Thread*=0x7fbcebe06000,peer=0x2ac070a0,"Signal Catcher"]: reacting to signal 3
01-09 22:29:21.013 3881-3886/com.gdbd.geedeebeedee I/art: Wrote stack traces to '/data/anr/traces.txt'
而对于我自己的意图,当在小部件内按下一个按钮时发送,需要10秒钟。
01-09 22:34:25.353 4314-4314/com.gdbd.geedeebeedee D/GdbdWidget: Received intent: change_day_staus
01-09 22:34:35.362 4314-4319/com.gdbd.geedeebeedee I/art: Thread[2,tid=4319,WaitingInMainSignalCatcherLoop,Thread*=0x7fbcebe06000,peer=0x2ac070a0,"Signal Catcher"]: reacting to signal 3
01-09 22:34:35.549 4314-4319/com.gdbd.geedeebeedee I/art: Wrote stack traces to '/data/anr/traces.txt'
7条答案
按热度按时间rdrgkggo1#
我去了模拟设备的设置-〉开发者选项,并启用“显示所有ANR”,现在出现一个警告“您的应用程序没有响应”,我可以点击“等待”,它似乎工作。
qaxu7uf22#
这不是停止分离的解决方案。但您可以在分离后直接重新附加调试器。您可以使用工具栏中的按钮将调试器附加到正在运行的进程:
我知道这并不理想,但也许这已经足够让您继续调试了。
rsaldnfx3#
您是否尝试过在Android Studio上禁用即时运行。可能是调试时发生冲突。
k4aesqcs4#
使用Android studio. ADB WIFI的这个插件
连接两个设备1)PC/笔记本电脑2)移动的在同一个网络上,并这样做工具-〉Android -〉ADB WIFI -〉ADB USB到WIFI。
谢谢
vohkndzv5#
我有类似的问题。原来断点是在行,必须做一些UI任务(意图调用其他活动)。只是移动您的断点到一些其他的地方,不涉及UI处理。我解决了我的问题这样。
hrysbysz6#
以下是此问题的答案https://stackoverflow.com/a/60625487/1597841
sbtkgmzw7#
也许这对你有帮助。请你检查一下下面的建议
你选择你的设备,然后选择你的软件包名称在右边你可以看到旁边regex选择从下拉菜单只显示选定的应用程序