This question already has answers here:
Communication between Activity and Service
(9个答案)
3年前关闭。
我在Android应用程序中使用了一个称为“ FirstStart”的活动。用户按下“注册”按钮后,我启动了注册意向服务以在我的服务器和GCM上注册用户。
在我的
之后,
此过程需要几秒钟。我不希望用户在正常屏幕上等待,因此我在“ FirstStart活动”中放置了一个进度栏。它在RegistrationIntentService启动之前被调用并启动。
注册意向服务完成后,我想停止FirstStart中的进度栏,并完成注册意向服务以及FirstStart活动。
那么,如何在RegistrationIntentService的末尾完成FirstStart活动?
还是在RegistrationIntentService完成后可以返回FirstStart活动?
(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