您现在在 AsyncTask 中使用的上下文是您当前活动的上下文。默认情况下,屏幕旋转将破坏该 Activity 的当前实例并创建一个新实例。这是(即使一开始看起来不是这样)预期的行为。这样做的原因是您可能希望针对不同的屏幕方向使用不同的资源(布局、可绘制对象等)。为了应用这些可能不同的资源,Android 将在每次轮换时重新创建 Activity。
android:configChanges
您可以通过在文件中设置属性来抵消这种情况,AndroidManifest.xml
但在您的情况下,不建议使用此解决方案。
处理此问题的正确方法是将 Application Context 传递给AsyncTask
而不是您的 Activity (Activity
继承自Context
)。您可以通过getApplicationContext()
从 Activity 实例调用来做到这一点。您的应用程序上下文将持续存在诸如屏幕旋转和生命之类的事件,直到系统终止应用程序。
至于为什么需要一个 Context 实例来完成基本任务:
与有关应用程序环境的全局信息的接口。这是一个抽象类,其实现由Android系统提供。它允许访问特定于应用程序的资源和类,以及向上调用应用程序级操作,例如启动活动、广播和接收意图等。
This is how the official documentation defines a Context
.
Maybe someone can explain this better but for myself this definition is sufficient.