2011-11-16 69 views
2

我正在开发Android的倒数计时器应用程序。该应用程序可以显示剩余时间。即使电话被锁定或主要活动被破坏,它也必须工作。我想知道哪个以下应该使用,更重要的是,为什么我应该使用它(和为什么不是其他)。服务vs可运行vs AsyncTask

  • 服务
  • 可运行:静态参照Runnable对象。该引用在Activity类中声明。
  • 的AsyncTask
+2

你能详细说明这个计时器应用程序应该做什么吗?它是否像秒表?一个闹钟? – kaspermoerch

+0

您的计时器应用程序正在执行什么操作? –

+0

http://stackoverflow.com/questions/4909634/service-handler-timer-runnable-which-to-use-and-how –

回答

2

在我看来,如果你的应用需要能够在后台通知用户,我会用一个服务,所以如果你的应用程序已经被用户置于后台,当定时器准备就绪时,仍然可以通知用户,然后可以使用基于位置的事件时间等。

+0

另一种选择呢?我想知道选择应用程序中的每个选项的专业和建议。 – wannik

+0

AsyncTask只是一个从UI线程启动的新线程,它主要是为了检索数据并显示它,而不是等待这么久,但这将在应用程序启动时工作。一旦关闭,线程将退出。 –

+0

Runnable只是一个代码,意味着要在后台线程上运行,所以同样的原则,如果你的应用程序放在后台将停止运行 –

2

服务在这种情况下最好,它会像你一样要求,甚至在米的时候继续跑步ain活动被破坏,并且不太可能被Android操作系统杀死。

AsyncTask和runnable都依赖于你的应用程序仍然处于活动状态,而一个服务独立运行,当它打开或重新启动以显示从服务传递的信息时,或者服务可以在它自己的,显示通知等等。

+0

如果我对AsyncTask或Runnable进行了静态引用,只要我的应用程序存活,该对象是否会存在? – wannik

+0

由于Android系统决定在低内存条件下应该杀死什么,所以我无法确定地告诉您,但无论哪种方式,您不应将AsyncTask用于正在进行的进程,AsyncTask的要点是运行在后台执行任务,并在进程间隔或结束时在UI线程上执行方法,如果你的应用程序被杀死了,我相信AsyncTask会与它一起。 你真的应该使用服务来进行一些事情。你的目标是即使活动被销毁也能运行一些东西,而服务是活动独立的方式。 – Guykun