2

通知执行某些后台处理的片段的托管活动的推荐方法是什么,它已完成。假设片段正在运行一些在主循环器之外执行工作的线程。

一个简单的回调不会做,因为:

  • 由于屏幕旋转,Activity 可能会被分离,这会导致 NullPointerException。
  • 从活动内部轮询只是愚蠢的
  • 如果附加,只调用一次活动,并在每次 onCreate 调用后让活动检查(即由于屏幕旋转)。
  • 我目前所做的但似乎是错误的:每当附加 Fragment 时,它都会检查工作是否完成并通过回调通知活动。如果片段完成工作,它还将回调活动(如果附加)。

为什么我认为是错误的?因为我有一些非常丑陋的方法来检查片段是否已附加以及工作是否已完成以便调用回调。当在片段中执行某些工作期间引发异常并且活动被分离时,这将变得非常愚蠢。如果 android 决定在同一时刻调用 onSaveInstance,我将不得不将 Exception 放入 Bundle 并稍后在从保存状态重新创建 Activity 和 Fragment 时交付它。此外,我可能会遇到一个活动将收到两次相同回调的情况(一次来自检查片段,第二次是在附加片段时;这可能在应用程序被保存和恢复时发生)

这会生成如此多的代码,在我看来,如果活动不会被分离,可能会更加清晰。这就是为什么我希望我做错了什么,并希望有人能为我提供更好的解决方案。

4

1 回答 1

2

我会说您应该使用服务进行后台处理,但是如果您出于特定原因选择了片段,则可以坚持使用。您应该通过可能与活动具有不同生命周期的片段或服务通知活动的方式是通过BroadcastReceiver。使用此方法,活动可以在其自己的生命周期回调期间注册取消注册BroadcastReceiver。从片段或服务中,您只需发送广播并忘记它。如果一个活动正在监听广播,它将接收它,如果不是什么都不会发生。

于 2013-05-28T20:28:58.390 回答