我对AsyncTask和Thread的生命周期有些困惑。 当操作系统进入OnStart/OnStop和onResume/onPause序列时,进程的线程会发生什么变化? 这个序列会影响线程吗? 我问这个问题是因为我在线程中使用了sockets,而杀死线程也会杀死tcpip连接(我认为)。 如果线程没有被杀死,那么我该如何“重新连接”它们,特别是它们可能通过Handler与一个活动相连。
我对AsyncTask和Thread的生命周期有些困惑。 当操作系统进入OnStart/OnStop和onResume/onPause序列时,进程的线程会发生什么变化? 这个序列会影响线程吗? 我问这个问题是因为我在线程中使用了sockets,而杀死线程也会杀死tcpip连接(我认为)。 如果线程没有被杀死,那么我该如何“重新连接”它们,特别是它们可能通过Handler与一个活动相连。
当应用程序进入onStop或onPause状态时,线程不会自动关闭,但是不能保证它不会被关闭。Android将保持其运行直到需要该线程正在使用的资源。
通常情况下,如果您希望在Activity
关闭时保持持久连接,则将其放入Service
中。您可以像在Activity中一样运行线程(以防止通常发生的阻塞),这样Android就不太可能将其关闭了。
在内部,AsyncTask使用固定的线程池。(请参见http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html)
因此,即使AsyncTask完成了,线程也不会死亡。但是线程池中的线程可以被终止。