我有这段代码:
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),我需要活动的上下文。
答案 0 :(得分:4)
这是一个好习惯吗?我需要制作Toast并通知 另一个类(不是Activity),我需要活动的上下文。
号。这不是一个好习惯。您应该显示Services
的通知。但这取决于你可以做的应用程序行为。
案例1: 如果服务/意图服务正在运行并将任务转移到后台..
您应该显示通知而不是Toast。阅读 How to show notification from background service?
案例2: 如果服务/意图服务正在运行并将任务转移到后台,但会将结果返回给某个活动(这意味着用户出现在您的应用中)
在这种情况下,您可以显示Toast。阅读 Show toast at current Activity from service
注意: 并且不要通过Intent
向MyIntentService
传递上下文。通过Context
,您也可以MyIntentService
进入MyIntentService.this
。这是因为所有Android Components
都会覆盖Context
类,其中IntentService
为。{/ em>
答案 1 :(得分:1)
当您在cross-activity
用法中使用上下文时,不应该将Activity context
绑定到操作,因为那时即使活动被销毁,也不会被垃圾收集,因为它仍然从正在运行的任务中引用。在这些情况下,您应该使用Application context
。有关the android developer blog的更多信息,请访问