This question already has answers here:
Communication between Activity and Service
                                
                                    (9个答案)
                                
                        
                                3年前关闭。
            
                    
我在Android应用程序中使用了一个称为“ FirstStart”的活动。用户按下“注册”按钮后,我启动了注册意向服务以在我的服务器和GCM上注册用户。
在我的onClik(View v)中,我启动了Intent:

Intent intent = new Intent(this, RegistrationIntentService.class);
        intent.putExtra("user", givenUsername);
        startService(intent);


之后,public void onHandleIntent(Intent intent)启动并从GCM获取令牌,并将其放入我的服务器。

此过程需要几秒钟。我不希望用户在正常屏幕上等待,因此我在“ FirstStart活动”中放置了一个进度栏。它在RegistrationIntentService启动之前被调用并启动。

注册意向服务完成后,我想停止FirstStart中的进度栏​​,并完成注册意向服务以及FirstStart活动。

那么,如何在RegistrationIntentService的末尾完成FirstStart活动?
还是在RegistrationIntentService完成后可以返回FirstStart活动?

最佳答案

那么,如何在结束时完成FirstStart活动?
  RegistrationIntentService?


显然,必须在FirstStart和RegistrationIntentService之间建立通信。最快的方法是:


使用FirstStart方法在registerReceiver()中注册BroadcastReceiver。其次,一旦完成了RegistrationIntentService中的所有作业,您唯一要做的就是从服务中移至sendBroadcast()。请记住关于IntentFilter设置正确的操作,以便从RegistrationIntentService发送的广播与BroadcastReceiver中注册的FirstStart匹配
进行与第一个建议基本相同的操作,但使用LocalBroadcastManager进行常规广播和使用LocalBroadcastManager进行广播之间的区别在于,在后一种情况下,广播消息仅在您的应用程序的过程中可见。在前一种情况下,广播可能会被其他应用程序拦截(如果没有权限限制,则c)
使用一些开源产品,例如绿色机器人的EventBus,它在广播方面基本上具有相同的功能,但具有您创建的自定义对象。



  还是有一种方法可以返回到FirstStart活动中,
  RegistrationIntentService完成了吗?


尽管如此,基于广播的通信仍是使活动与服务对话的方式。

希望能以某种方式有所帮助:)

10-05 19:32