Android守护程序类型功能

时间:2012-06-08 15:18:44

标签: android

如果我从UI线程通过AsyncTask生成一个线程,那么当UI线程终止时该线程是否被终止?

我的AsyncTask(衍生的用户界面)执行操作,然后根据需要调用通知管理器(我的应用程序功能的一部分)。这很好用,但是当应用程序退出时通知会停止,我假设这是因为UI线程已经终止,所以孩子也是如此。

我确实考虑了一个服务(假设它最初会执行类似于守护进程),但后来读取它们在UI /主线程上运行,因此在UI线程终止时不会持久。

我的问题是如何才能获得从Android应用程序中生成的守护程序的功能?我不需要在产生父进程之外的权限,并且它不需要在重新启动后保持持久性。

POSIX API'穿过NDK线程还是我完全错了?

只用了几天Android,所以仍然试着感受我的方式。非常感谢!

3 个答案:

答案 0 :(得分:1)

  

如果我从UI线程通过AsyncTask生成一个线程,那么当UI线程终止时该线程是否被终止?

不是自动而不是立即。线程将运行完成,或直到Android终止进程,以先到者为准。

  

我确实考虑了一个服务(假设它最初会执行类似于守护进程),但后来读取它们在UI /主线程上运行,因此在UI线程终止时不会持久。

在经典的Linux意义上,服务并不是真正的“守护进程”。从UI的角度来看,服务会自动在后台运行。从线程角度来看,它不会自动出现在后台。服务所做的任何工作需要一些时间,应该在后台线程上完成。不同的是,在服务运行的情况下,Android不会那么快地终止您的流程。

  

我的问题是如何才能获得从Android应用程序中产生的守护程序的功能?

这取决于你试图获得的“守护进程”的哪些功能,你在你的问题中忽略了这些功能。

  

POSIX API'穿过NDK线程

那对你没有好处。当您的流程终止时,您的主题仍会被终止。

答案 1 :(得分:1)

线程在进程内执行。 Android会暂停(以便以后重用)或者在应用程序被销毁时终止它,这会占用所有线程。所以守护进程必须是一个断开连接的进程,而不是一个线程。故意设置Android以防止您启动这些(虽然子进程对于Runtime.exec()及其亲属来说很简单)。我认为你可以通过fork / exec()在NDK中做你想做的事情,但是手机必须根植于运行生成的应用程序,这会产生许多问题。对于有根电话的电话来说,保修通常是无效的。

答案 2 :(得分:0)

我必须实现几乎相同的功能:从后台发射通知。

这很简单:启动服务并从服务中生成新线程。

有许多场景,Android平台提供了一些免费的好东西,你不必自己开始创建线程。

例如:

  • 如果您的线程应该等待某些事情,您可以使用AlarmManager安排定期“唤醒”事件,该事件将负责在后台运行
  • 或者如果您需要在后台与后端同步数据,则可以使用SyncAdapter API,它也可以在后台运行。

正如CommonsWare刚刚建议:

  

这取决于你试图获得的“守护进程”的哪些功能,你在你的问题中忽略了这些功能。