Android 上下文、异步任务和轮换更改

Android 上下文、异步任务和轮换更改,android,android-activity,android-asynctask,rotation,android-context,Android,Android Activity,Android Asynctask,Rotation,Android Context,使用getApplicationContext()处理AsyncTask是否是一种好的做法,这样就不必附加和分离活动,从而避免在发生旋转更改且活动被销毁时发生内存泄漏?我认为它应该是正确的,因为我实际上需要一个依赖于应用程序的上下文,而不是活动本身 更重要的是,在这些情况下,最好将活动用作上下文(因为您需要访问显示的活动)。。。与其在销毁时分离它(分配给null),然后在onCreate()中分配新实例,可以避免分离?因此,只需重新分配新实例,这样,我们就可以避免NullPointerExcep

使用
getApplicationContext()
处理AsyncTask是否是一种好的做法,这样就不必附加和分离活动,从而避免在发生旋转更改且活动被销毁时发生内存泄漏?我认为它应该是正确的,因为我实际上需要一个依赖于应用程序的上下文,而不是活动本身


更重要的是,在这些情况下,最好将活动用作上下文(因为您需要访问显示的活动)。。。与其在销毁时分离它(分配给null),然后在
onCreate()
中分配新实例,可以避免分离?因此,只需重新分配新实例,这样,我们就可以避免NullPointerException的问题,因为总会有上下文可供使用

它的答案很好地解释了该怎么做。它的答案解释了
异步任务
上下文
问题背后的一些好理论。

根据我自己的经验,我可以说在大多数情况下,在处理
异步任务
时,使用
活动
作为
上下文
比使用
getApplicationContext()
更好。这是因为大多数情况下,您需要从活动中访问成员,并且只有在异步任务中有对活动的引用时,才允许您这样做

为了回答我关于避免
detach()
的问题,让我说,在这种情况下,您可以避免它,或者像@commonware所说的那样,您可以毫无问题地执行它。因此,根据他所说的,我们确信在旋转更改期间,当活动为空时,我们不会得到
NullPointerException

onProgressUpdate()和onPostExecute()在OnRetainOnConfigurationInstance()的开始和后续onCreate()的结束之间挂起

如果我没有错的话,在新创建的活动的
onCreate()
中,不显式分离和只重新连接新活动的主要区别在于,在几毫秒后重新连接时释放旧活动实例。但在这两种情况下,最终的行为是相同的


希望这对其他人有帮助!:)

谢谢你的回答第二篇文章对@commonware的回复帮助很大。他向我解释了
detach()
及其工作原理:)