在加载 RSS 提要时旋转设备时如何防止错误
How to prevent error when rotating device while RSS feed loads
我开发了一个小应用程序,可以从我自己的 link 中读取和 rss xml 文件。该应用程序运行良好。
但是,我注意到当我在 Feed 完全加载之前旋转 phone 时,应用程序崩溃了。
此外,如果我在加载 RSS 提要后旋转设备,Activity 会再次重新加载提要。任何人都知道崩溃发生的原因或原因?
我想到了以下两种解决方案:
强制 Activity 始终处于纵向布局。
在加载 RSS 提要时禁用旋转,然后再释放。如果可能的话。
有什么建议吗?
抱歉耽搁了...以下是我得到的轨迹:
09-15 09:53:31.209 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/ViewRootImpl: sendUserActionEvent() mView == null
09-15 09:53:31.754 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/ViewRootImpl: sendUserActionEvent() mView == null
09-15 09:53:31.769 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/AndroidRuntime:致命异常:main
09-15 09:53:31.769 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/AndroidRuntime: 过程: com.relentlessdev.maleadvise, PID: 30468
09-15 09:53:31.769 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/AndroidRuntime: java.lang.IllegalArgumentException: 查看=com.android.internal.policy.impl.PhoneWindow$DecorView{78a8658 V.E... .. R .....ID 0,0-1696,464} 未附加到 window 经理
我能想到的最好的(因为你没有提供任何代码片段)是你遗漏了与 android activity 相关的非常重要的一点。每当屏幕旋转发生变化时,android 中的 Activity 都会从头开始重新创建。再次创建 activity 时,您的代码中很可能存在一些 NullPointerException。在 activity 级别的 android 中,有几种方法可以处理屏幕旋转。根据我的最佳解决方案是覆盖
public void onConfigurationChanged(Configuration newConfig)
for Activity class 并自行处理旋转。
当 phone 旋转时,Android 杀死你的 activity。每次旋转 phone 时都会调用 OnCreate。出现异常的原因是您的视图依赖于尚未初始化的变量。
因此,您需要将提要数据保存到 OnSaveInstanceState 中的包中,并在 OnRestoreInstanceState 中检索它。在您的 OnCreate 方法中,检查传递给它的包是否为空。如果它为空,那么 activity 已经第一次启动,您需要从 XML 加载提要数据 - 初始化您的变量。如果它不为空,则 phone 已轮换,您可以简单地从包中重新加载提要数据 - 使用从包中恢复的数据初始化您的变量。
我开发了一个小应用程序,可以从我自己的 link 中读取和 rss xml 文件。该应用程序运行良好。
但是,我注意到当我在 Feed 完全加载之前旋转 phone 时,应用程序崩溃了。
此外,如果我在加载 RSS 提要后旋转设备,Activity 会再次重新加载提要。任何人都知道崩溃发生的原因或原因?
我想到了以下两种解决方案:
强制 Activity 始终处于纵向布局。
在加载 RSS 提要时禁用旋转,然后再释放。如果可能的话。
有什么建议吗?
抱歉耽搁了...以下是我得到的轨迹:
09-15 09:53:31.209 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/ViewRootImpl: sendUserActionEvent() mView == null 09-15 09:53:31.754 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/ViewRootImpl: sendUserActionEvent() mView == null 09-15 09:53:31.769 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/AndroidRuntime:致命异常:main 09-15 09:53:31.769 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/AndroidRuntime: 过程: com.relentlessdev.maleadvise, PID: 30468 09-15 09:53:31.769 30468-30468/com.rrrrrrrr.xxxxxxxxxx E/AndroidRuntime: java.lang.IllegalArgumentException: 查看=com.android.internal.policy.impl.PhoneWindow$DecorView{78a8658 V.E... .. R .....ID 0,0-1696,464} 未附加到 window 经理
我能想到的最好的(因为你没有提供任何代码片段)是你遗漏了与 android activity 相关的非常重要的一点。每当屏幕旋转发生变化时,android 中的 Activity 都会从头开始重新创建。再次创建 activity 时,您的代码中很可能存在一些 NullPointerException。在 activity 级别的 android 中,有几种方法可以处理屏幕旋转。根据我的最佳解决方案是覆盖
public void onConfigurationChanged(Configuration newConfig)
for Activity class 并自行处理旋转。
Android 杀死你的 activity。每次旋转 phone 时都会调用 OnCreate。出现异常的原因是您的视图依赖于尚未初始化的变量。
因此,您需要将提要数据保存到 OnSaveInstanceState 中的包中,并在 OnRestoreInstanceState 中检索它。在您的 OnCreate 方法中,检查传递给它的包是否为空。如果它为空,那么 activity 已经第一次启动,您需要从 XML 加载提要数据 - 初始化您的变量。如果它不为空,则 phone 已轮换,您可以简单地从包中重新加载提要数据 - 使用从包中恢复的数据初始化您的变量。