赞
踩
android studio运行 没有activity的service服务时,出现ANR。
ActivityManager: ANR in com.device.idea.study
PID: 14267
Reason: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{64d96a1 u0 com.device.idea.study/.FirstService}
该服务是通过adb shell am start-foreground-service -n com.device.idea.study/com.device.idea.study.FirstService 来运行的,经过查资料得知startForegroundService运行后 10秒内没有调用 startForeground的话,会出现ANR。于是在service的oncreate中加入了startForeground的调用。
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "on create");
Notification notification = new Notification.Builder(getApplicationContext(), "study").build();
Log.i(TAG, "startForeground");
startForeground(1, notification);
}
然后再次adb shell运行,依然出现上述报错,发现onCreate之后,10秒内还是没有调用到startForeground接口。仔细排查日志发现: onCreate之后立马被stop了。应用在没有完成启动前台服务之前不能调用stop 或 stopSelf。
网上没有找到异常stop的解决办法,并且该服务只是本地调测一下,因此想到一个投机取巧的方法:
adb shell am start-foreground-service -n com.device.idea.study/com.device.idea.study.FirstService
adb shell am startservice -n com.device.idea.study/com.device.idea.study.FirstService
调用start-foreground-service 之后的10秒内,再次调用startservice 命令。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。