2017-01-02 167 views
0

我的Android应用程序中的后台工作是通过交流顺序进程完成的,意思是监听BlockingQueue上的命令的线程。Android onPause:为什么要停止线程?

线程/演员在MainApplication中初始化。

停止一个Activity.onPause期间这些线程带来了一些并发症,例如在BlockingQueue一些命令可以onResume被调用之前到达

问题1:为什么还要在期间阻止这些线程?他们处于阻塞状态,没有做任何工作,所以他们不应该有任何性能影响。

问题2:当调用然后onDestroy被调用时,这些线程发生了什么? ART会杀死他们吗? .interrupt()他们?有没有暂停?

+0

*没有做任何工作*他们没有检查是否有任何工作要做? –

+0

线程处于等待状态。 –

回答

2
  1. 你的问题是基于意见的,但不阻止它们可能会造成一些性能。作为一般的经验法则,当用户界面没有向用户显示时(在onStop之后),您应该停止所有工作。所以,如果让他们处于等待状态就够了,那就取决于你了。

  2. onDestory仅“销毁”您的Activity实例而不是您的VM实例(或进程)。其他单例对象或未被垃圾收集的对象将保持活动状态,包括后台线程。

+0

它不会破坏我的MainApplication,或者它?线程从那里开始。 –

+0

不是不。但你必须明白,一旦你的应用程序没有任何活动组件(Activity,BroadcastReceiver,Service等),Android可能会完全中止你的应用程序/进程,而没有任何警告清理RAM内存,以便其他应用程序可以使用它。因此,在极端情况下(低内存设备),您的线程可能会最终停止。 –