如何调试 Android 后台服务?
Posted
技术标签:
【中文标题】如何调试 Android 后台服务?【英文标题】:How to debug an Android Background Service? 【发布时间】:2013-08-03 00:07:14 【问题描述】:我一直在为 android 开发一个包含后台服务的 PhoneGap 应用程序。我的问题是:如何调试此服务?是否可以使用 AVD 进行调试并逐步进行?或者我可以使用自己的设备来实现吗?
谢谢!
【问题讨论】:
【参考方案1】:是的,可以使用 AVD 或设备来完成。查看http://www.helloandroid.com/tutorials/how-debug-service 和Debugging a service。
【讨论】:
你好 Android 开发者,谢谢一百万! 赚两百万!【参考方案2】:您可以通过放置一条语句来调试您的服务,我在这里提到它:
@Override
public void onCreate()
super.onCreate();
//whatever else you have to to here...
android.os.Debug.waitForDebugger(); // this line is key
【讨论】:
【参考方案3】:您可以在服务内部使用通常的日志(用于不深入调试),然后在应用处于后台或关闭时使用监控工具查看这些日志。
打开监控工具:
-
打开 SDK(你的 SDK 文件夹)>tools>lib>monitor-x86_64
打开您的监控工具并选择一个设备,您就可以像在通常的调试器中一样查看日志记录并按标签搜索。
【讨论】:
【参考方案4】:特定于 intellij Idea,尽管 eclipse 也可能有等效的解决方案,
我在 Shishupal 的回答中添加了一些对我有用的点,我们需要在服务代码中添加 android.os.Debug.waitForDebugger();
。
但除此之外,我们需要取消选中“部署应用程序” 并选择“不启动 Activity”。
在 12.1.4 版本中它看起来像这样:
【讨论】:
【参考方案5】:查找后台服务的启动位置,例如
public BGcheckService()
Log.d("BGcheckService: ", "starting service");
然后插入一行:
public BGcheckService()
android.os.Debug.waitForDebugger();
Log.d("BGcheckService: ", "starting service");
除此之外,如果你的后台服务在一个单独的进程中,那么当你按下debug
按钮开始调试你的后台服务时,你还需要等待后台服务启动,然后按下按钮附加到进程(参见 Android Studio 3.6.1 的屏幕截图 .. 它是 debug
按钮右侧的第三个按钮)。您可以选择附加到的进程,其中一个是后台服务的单独进程。
注意:
-
没有
android.os.Debug.waitForDebugger();
行,后台服务将直接启动,无需等待调试器附加。
即使使用android.os.Debug.waitForDebugger();
行,您仍然需要将调试器附加到后台服务的进程。
按下按钮附加到进程的时间,需要在后台服务启动后(在android.os.Debug.waitForDebugger();
等待时),否则进程将不存在,你将无法选择它。
【讨论】:
以上是关于如何调试 Android 后台服务?的主要内容,如果未能解决你的问题,请参考以下文章