我正试图从我的活动中启动一个服务来监视网页上的更改。 这是一个私有应用程序,所以我不会影响电池寿命... 但我想从我的服务传递数据到我的活动... 我似乎找不到一种方法来从我的服务中调用活动。如何实现这一点?
正如Alex所指出的那样,您可以将某种类型的监听器或回调绑定到服务上,在事件发生时使用它。
或者,您可以使用广播Intent
,例如使用setPackage()
等方法在Intent
上限制广播的范围。
或者,您可以使用createPendingResult()
创建一个PendingIntent
,将其作为Intent
附加项传递给服务 -- 服务可以使用该PendingIntent
来触发您的活动中的onActivityResult()
方法。
或者,您可以使用ResultReceiver
。
或者,您可以使用Messenger
。
(诚然,我没有尝试过后两种方法,但我认为它们在这里也可以工作)
另一个选择是:如果您的服务更新了内容提供程序,则可以通过ContentObserver通知活动。如果您的服务从服务器下载一些数据,并且只想在活动中显示新鲜内容,则这已经足够。
一些不太优美的方法:
1.) 如果活动还没有启动,那么使用 intent
和 startActivity
,但记得加上 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2.) 否则,如果活动已经启动,你可以在活动中编写自己的回调方法,并在服务中注册该方法,然后直接调用服务中的方法。
希望找到一些更好的方法。
我认为广播也可以很好地工作,你可以编写一个静态内部类来接收广播并启动活动。但在我看来,这也不太优美。
ResultReceiver机制已在另一篇文章中进行了解释:Restful API service。但是它并不适用于所有情况。请参考我在那篇文章中的评论。有限范围广播或PendingIntent机制似乎更合适。
getParcelableExtra()
。 - CommonsWare