如何调试 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 后台服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何让android的service一直在后台运行

如何创建在后台运行的Android服务

如何在特定时间触发android中的后台服务?

如何在android后台服务中监听firebase事件?

Android - 如何在服务的后台获取位置更新

如何让android的service一直在后台运行