如果我从UI线程通过AsyncTask生成一个线程,那么当UI线程终止时该线程是否被终止?
我的AsyncTask(衍生的用户界面)执行操作,然后根据需要调用通知管理器(我的应用程序功能的一部分)。这很好用,但是当应用程序退出时通知会停止,我假设这是因为UI线程已经终止,所以孩子也是如此。
我确实考虑了一个服务(假设它最初会执行类似于守护进程),但后来读取它们在UI /主线程上运行,因此在UI线程终止时不会持久。
我的问题是如何才能获得从Android应用程序中生成的守护程序的功能?我不需要在产生父进程之外的权限,并且它不需要在重新启动后保持持久性。
POSIX API'穿过NDK线程还是我完全错了?
只用了几天Android,所以仍然试着感受我的方式。非常感谢!
答案 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平台提供了一些免费的好东西,你不必自己开始创建线程。
例如:
正如CommonsWare刚刚建议:
这取决于你试图获得的“守护进程”的哪些功能,你在你的问题中忽略了这些功能。