0

我正在开发一个应用程序,当应用程序启动时我需要启动后台服务。

最初我在 Application.onCreate() 方法中添加了第一个服务的启动过程。

之后,我意识到如果用户出于某种原因停止了后台线程,我需要重新启动服务。因此,我将服务启动代码从 Application.onCreate() 移至主 Activivity.onResume()。

根据文档,在已经运行的服务上调用 startService() 没有问题。

在那之前,一切都很好。我的第一个后台服务实现得很好。当它启动时,它会创建一个新线程来运行后台处理,而不会出现重大问题。

实施第一项服务后,我转到了第二项服务。这里没有问题。但是在实现它并在 Activity.onResume() 方法上添加服务启动调用之后。

private void startServices() {
    startTrackingService();
    startBacklogService();
}

private void startTrackingService() {
    if (Z10.DEBUG) {
        Log.i(LOG_TAG, "REQUESTING TRACKING SERVICE START");
    }  

    Intent serviceLauncher = new Intent(Main.this, TrackingService.class);
    startService(serviceLauncher);
    if (Z10.DEBUG) {
        Log.i(LOG_TAG, "TRACKING SERVICE START REQUESTED");
    }  
}

private void startBacklogService() {
    if (Z10.DEBUG) {
        Log.i(LOG_TAG, "REQUESTING BACKLOG SERVICE START");
    }  

    Intent serviceLauncher = new Intent(Main.this, BacklogService.class);
    startService(serviceLauncher);
    if (Z10.DEBUG) {
        Log.i(LOG_TAG, "BACKLOG SERVICE START REQUESTED");
    }  
}

这段代码阻塞了 main 方法并且应用程序必须被杀死。

尝试调试应用程序(没有android源代码很难!!!),我意识到startService并没有真正启动服务,它只是将操作添加到待处理的Looper队列上。

如果我按顺序执行两个 startService 操作,主线程会阻塞,但如果在主线程上执行其他操作(与 UI 相关)之后,然后启动第二个服务,它就可以正常工作。

问题是我真的需要在应用程序启动时启动这两个服务,或者在主活动恢复时重新启动它们中的任何一个。

4

0 回答 0