2016-09-24 75 views
0

我应该使用什么使一个应用程序,它会:服务VS螺纹

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

我希望能够在此期间完成一些基本任务,或锁定我的屏幕而不会导致线程死亡。我不希望服务在关闭应用程序后继续运行,我只是想确保线程在运行很长时间后永远不会被杀死。

我也想问:服务和线程交互是否容易?我可以通过一个CancellationToken并取消它,当用户按下停止按钮?

我还发现setThreadPriority,它会帮助我的情况吗?

回答

2

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

如果您想执行一些任务但不绑定到Android Activity生命周期,则使用服务。如果要并行运行,则使用线程。如果你想要两个,那么你使用一个启动线程的服务。

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

+0

如果我不做任何资源昂贵,线程将无限运行吗? – sooqua

+0

一个线程运行,直到线程的函数返回或应用程序退出。请注意 - 应用程序退出,而不是活动。只要完成Activity就不会杀死线程,当你的Activity被销毁时你需要取消它,以便它可以退出。 –

+0

> _线程运行,直到线程的函数返回或应用程序退出._这是真的,但[本文](https://developer.android.com/guide/components/processes-and-threads.html)指出:持有当前对用户不可见的活动的进程不会直接影响用户体验,并且系统可以随时取消它们以回收前景,可见或服务进程的内存。 – sooqua

0

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

+0

但我想要“隔离”的对立面。我想和线程交互一样。关闭我的应用后,它不需要继续运行。我只是需要这份工作,无论如何运行,我正试图找到最好的方法来做到这一点 – sooqua

+1

你可能想看看[Bound Services](https://developer.android.com/guide/components/bound- services.html)。这些作为您的活动可以与之互动的服务。也许这会有所帮助 – GPRyan