【问题标题】:Service vs Thread服务与线程
【发布时间】:2016-09-24 04:20:20
【问题描述】:

我应该用什么来制作一个应用程序:

  1. 向用户询问用户名和密码
  2. 授权
  3. 运行一个无限循环,它会每隔 10 秒左右从网站获取一些数据。

我希望能够同时执行一些基本任务,或者在线程不被杀死的情况下锁定我的屏幕。我不希望服务在我关闭应用程序后继续运行,我只想确保线程在长时间运行时不会被杀死。

我还想问:服务是否像线程一样容易交互?我可以在其中传递一个CancellationToken 并在用户按下停止按钮时取消它吗?

我还找到了setThreadPriority,对我有帮助吗?

【问题讨论】:

    标签: c# android multithreading xamarin


    【解决方案1】:

    服务和线程是完全不同的概念。线程是并行执行的独立进程。服务是应用程序的一个组件,它没有 UI 并以单独的生命周期运行。服务不会在自己的线程上运行,它在 UI 线程上运行(尽管它可以根据需要启动线程)。

    如果您想执行某些任务但不受 Android Activity 生命周期的约束,则可以使用 Service。如果要并行运行,请使用线程。如果两者都需要,则使用启动线程的服务。

    根据我正在阅读的内容(您不希望线程在 Activity 完成后继续),您需要的是线程而不是服务。

    【讨论】:

    • 如果我不做任何消耗资源的事情,线程会无限运行吗?
    • 线程一直运行,直到线程的函数返回或应用程序退出。请注意 - 应用程序退出,而不是活动。仅完成 Activity 不会杀死线程,您需要在 Activity 被销毁时取消它,以便它可以自行退出。
    • > 线程一直运行,直到线程的函数返回或应用程序退出。 确实如此,但this article 声明:一个进程持有当前不可见的活动用户对用户体验没有直接影响,系统可以随时杀死他们,为前台、可见或服务进程回收内存。
    • @sooqua 是的。但任何事情都是如此。如果操作系统决定它需要它的资源,任何当前不是前台应用程序的应用程序都可以随时结束。这是无法避免的。
    • 好的,那么我会使用线程并希望 Android 在某个时候不会决定杀死它。谢谢。
    【解决方案2】:

    服务可以独立运行(而您的应用不一定在运行)。线程可以从您的应用本身或服务中分离出来。

    【讨论】:

    • 但我想要“隔离”的反面。我想与它进行交互,就像我与线程一样。在我关闭我的应用程序后它不需要继续运行。无论如何,我只需要运行这项工作,并且我正在努力找到最好的方法来做到这一点
    • 您可能想查看Bound Services。这些充当您的活动可以与之交互的服务。也许这会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多