我正在尝试从我的Service
启动Activity
以查找网页上的更改,这是一个私人应用,所以我不打扰电池续航时间......
但我想将数据从Service
传递到我的Activity
...我似乎找不到从{{1}调用Activity
的方法}}。我怎样才能做到这一点?
答案 0 :(得分:47)
正如Alex指出的那样,您可以绑定到服务并将某种侦听器或回调传递给服务以用于事件。
或者,您可以使用广播Intent
,也许可以使用setPackage()
上的Intent
等方法来限制广播的范围。
或者,您可以使用createPendingResult()
创建一个PendingIntent
作为Intent
额外服务传递给该服务 - 然后该服务可以使用该PendingIntent
来触发您活动中的onActivityResult()
。
或者,您可以使用ResultReceiver
。
或者,您可以使用Messenger
。
(诚然,我没有尝试过后两种方法,但我认为他们会在这里工作)
答案 1 :(得分:3)
另一种选择:如果您的服务更新内容提供商,则可以通过ContentObserver通知活动。如果您的服务从服务器下载一些数据并且您只想在活动中显示新内容,这就足够了。
答案 2 :(得分:1)
一些丑陋的方式:
1。)如果活动尚未开始,请使用intent
和startActivity
,但请记住intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2.)否则,如果活动已经开始,您可以在活动中编写自己的回调方法并在服务中注册方法,然后直接调用服务中的方法。
希望找到一些聪明的方法。
我认为广播也很好用,你可以编写一个静态内部类来接收广播和开始活动。但在我看来这也很难看。
答案 3 :(得分:0)
ResultReceiver机制已在另一篇文章中解释: - Restful API service 但是它并不适用于所有情况。请参阅我对该帖子的评论。有限范围广播或PendingIntent机制似乎更合适。