如果我打电话
Intent intent = new Intent(ReadingActivity.this, AdService.class);
startService(intent);
来自onCreate
类的MyActivity
方法,如何从MyActivity.this
类的onHandleIntent()
方法内访问IntentService
@Override
protected void onHandleIntent(Intent arg0) {
// TODO Auto-generated method stub
((BookLib) getApplication()).createAd(I need to pass the calling activities context here);
}
答案 0 :(得分:11)
如何从IntentService类的onHandleIntent方法内部访问MyActivity.this
你没有。
将createAd()
移至活动中。如果时间有问题,请使用AsyncTask
而不是IntentService
。
IntentService
主要用于您希望工作与任何活动分离的情况(例如,即使用户离开您的用户界面,文件下载仍应继续)做其他事情。)
答案 1 :(得分:2)
在我看来,您似乎正在尝试与Activity
和Service
进行双向通信。而不是向您的服务发送Intent
,而是考虑使用binding。
编辑:回应CommonsWare的评论:
绑定到IntentService
的问题在哪里?我发布了包含绑定IntentService
的工作正常的应用。您没有提供任何证据来支持您的申请。
来自here:
服务既可以启动,也可以绑定连接。在 在这种情况下,系统只要保持服务运行 要么启动,要么有一个或多个连接
Context.BIND_AUTO_CREATE
标志。曾经两种情况都没有 保持,服务的onDestroy()
方法被调用,服务是 有效终止。所有清理(停止线程,取消注册 接收方)应在从onDestroy()
返回后完成。
文档清楚地表明系统支持同时绑定和启动。在常规IntentService
上使用Service
不会改变这一点。即使您在处理Intent
后明确停止服务,只要某些东西仍然绑定到它,Android就会保持运行。
此外,根据OP的目的,可能不再需要IntentService
。