在Fragment中通知已处理信息的活动

时间:2013-05-28 20:18:02

标签: android callback android-fragments android-activity

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

从那以后就不会做一个简单的回调:

  • 由于屏幕旋转,活动可能会分离,导致NullPointerException。
  • 从活动中进行投票只是愚蠢
  • 如果已连接,则仅调用活动一次,并在每次onCreate调用后检查活动(即由于屏幕旋转)。
  • 我目前正在做什么,但似乎错了:每当Fragment附加时,它将检查工作是否完成并通过回调通知活动。如果片段完成工作,它还将回调活动(如果附加)。

为什么我认为是错的?因为我有一些非常丑陋的方法来检查片段是否附加,以及是否完成了工作以便调用回调。当在片段中执行某些工作并且活动被分离时引发异常时,这变得非常愚蠢。如果Android的决定调用onSaveInstance在同一时刻我将不得不把异常到捆绑,后来它传递的时间活动和碎片从保存的状态重新。此外,我可以运行到其中活动将接收到相同的回调两次的情况下(从检查所述片段,并且当片段被附接在第二次一次;这可能发生在应用程序得到保存和恢复)

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

1 个答案:

答案 0 :(得分:2)

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