将Context传递给IntentService

时间:2013-11-29 09:08:22

标签: android

我有这段代码:

Intent publishIntent = new Intent(HistoryDoneVsPlanned.this, MyIntentService.class);
publishIntent.putExtra(HistoryMap.KEY_WORKOUT_ID, workoutId);

其中HistoryDoneVsPlanned是我当前的Activity,而MyIntetService是IntentService。

我的目标是在intentService传递活动的当前上下文,如下所示:

publishIntent.putExtra("CONTEXT", HistoryDoneVsPlanned.this);

但是不可能。

这是一个好习惯吗?我需要将Toast和通知发送到另一个类(而不是Activity),我需要活动的上下文。

2 个答案:

答案 0 :(得分:4)

  

这是一个好习惯吗?我需要制作Toast并通知   另一个类(不是Activity),我需要活动的上下文。

号。这不是一个好习惯。您应该显示Services的通知。但这取决于你可以做的应用程序行为。

案例1: 如果服务/意图服务正在运行并将任务转移到后台..

您应该显示通知而不是Toast。阅读 How to show notification from background service?

案例2: 如果服务/意图服务正在运行并将任务转移到后台,但会将结果返回给某个活动(这意味着用户出现在您的应用中)

在这种情况下,您可以显示Toast。阅读 Show toast at current Activity from service

注意: 并且不要通过IntentMyIntentService传递上下文。通过Context,您也可以MyIntentService进入MyIntentService.this。这是因为所有Android Components都会覆盖Context类,其中IntentService为。{/ em>

答案 1 :(得分:1)

当您在cross-activity用法中使用上下文时,不应该将Activity context绑定到操作,因为那时即使活动被销毁,也不会被垃圾收集,因为它仍然从正在运行的任务中引用。在这些情况下,您应该使用Application context。有关the android developer blog的更多信息,请访问