在 Android 中启动持久多线程服务的正确方法

Correct way of Starting Persistent Multithreaded Service in Android

我需要创建一个测试应用程序,该应用程序将允许 starting/stopping 持久后台服务 运行 在后台有多个线程。 (主要是一个 WebSocket 服务器和 Tango 定位服务)。它需要持久,这样我才能启动 Web 浏览器并连接到 ws 套接字。

根据我的阅读,申请的结构应该如下:

Activity -> 服务(持久化) -> (服务 (Tango) + 线程 (WS))

持久服务需要 运行 作为使用 startForeground() 的前台服务并作为单独的进程(在清单中设置),因此它不会在 activity 时关闭已关闭。

现在,我开始提问了: 1)我目前的理解是否正确?或者我是以错误的方式接近这个。 2) 如果我以后想停止服务,我想启动 activity 并能够从那里停止它。 activity 如何知道该服务是 运行ning 以及它如何连接到它?我需要实现绑定部分吗?如何? 3) 我能否实现 2) 改为使用通知并从那里关闭它?

这是我能想到的最好的方法,到目前为止它似乎有效。但是,如果有人有更好的方法来实现这个或更多 "correct" 我会改成那个答案。

我寻求的解决方案归结为我上面所说的。唯一的问题是我必须在 new 类 中实现 Runnable 来传递指针。 在服务的主线程中不执行网络代码非常重要,需要在单独的线程中执行。