【问题标题】:Application crashes when using fragments with activities in Android 2.2在 Android 2.2 中使用带有活动的片段时应用程序崩溃
【发布时间】:2012-01-12 16:34:26
【问题描述】:
我正在开发一个从数据库加载大量数据的应用程序,所以我使用 AsyncTasks 来做同样的事情。
这是我正在创建的内容的总体视图。我有 2 个活动,比如 ActivityA 和 AcitivityB。 ActivityB 有许多从数据库加载数据的片段。所以我为每个加载数据的片段使用了不同的 AsyncTask。
现在我的问题是,当我在加载片段以返回 ActivityA 时按下设备的后退按钮时,应用程序崩溃,因为 ActivityB 不再可用。我该如何解决这个问题?
我正在使用 Android 2.2 的支持库。
【问题讨论】:
标签:
android
crash
android-asynctask
android-fragments
【解决方案1】:
我不喜欢使用 try catch 块来吞下异常。你没有解决根本原因。
这就是我认为正在发生的事情。
当您按下后退按钮返回到 ActivityA 时,Activity B 中的片段视图被破坏,但您开始的 AsyncTask 继续执行,当它完成时,从 UI 调用 AsyncTask 的 onPostExecute(result) 方法线。我假设这是您更新片段视图的地方。但是如果视图已经被销毁,你会得到一个 NullPointerException,这就是为什么在尝试更新之前检查片段视图是否为空总是一个好主意。
【解决方案2】:
最好在进程在后台运行时显示ProgressDialog,并使其不可取消,这样当您单击后退按钮时,它将不允许任何操作。在onPreExecute() 中显示对话框并在onPostExecute() 中关闭。在后台加载数据时没有返回导航的机会。您将在 UI 线程上获得更新,并且不会出现任何异常以及应用程序崩溃。
【解决方案3】:
我得到了答案。只需将所有代码添加到 try catch 块中,即使活动/片段抛出异常,也可以防止应用程序崩溃。