Android GCM寄存器:阻止执行,直到它';完成了

Android GCM寄存器:阻止执行,直到它';完成了,android,block,google-cloud-messaging,Android,Block,Google Cloud Messaging,我在应用程序中使用GCM。用户要做的第一件事就是登录应用程序。当他发送数据时,如果登录正常,我调用gcmregistar.register。如果设备已成功注册,我将打开一个新活动,否则我希望保持在同一活动中并显示错误消息 我发现的问题是GCM寄存器是异步的,我想停止活动的执行,直到它结束。我尝试了以下方法: GCMRegistrar.register(this, SENDER_ID); GCMApplication app = (GCMApplication) getApplication();

我在应用程序中使用GCM。用户要做的第一件事就是登录应用程序。当他发送数据时,如果登录正常,我调用gcmregistar.register。如果设备已成功注册,我将打开一个新活动,否则我希望保持在同一活动中并显示错误消息


我发现的问题是GCM寄存器是异步的,我想停止活动的执行,直到它结束。我尝试了以下方法:

GCMRegistrar.register(this, SENDER_ID);
GCMApplication app = (GCMApplication) getApplication();
while(!app.isGcm_registered()){
    try {
         Thread.sleep(500);
    } catch (InterruptedException e) {
         e.printStackTrace();
    }
}

注册结束后,我在applicaton类中将gcm_registered设置为true。但是如果我这样做,register调用将被阻止,从我的gcminentservice中注册的onregister函数将永远不会被调用。如果我不阻止执行,寄存器将成功完成


如何在注册结束前阻止活动的执行?

“我想在注册结束前停止活动的执行”——这是一个非常糟糕的主意。它可能永远不会“结束”,因为互联网接入并非普遍可用。由于GCM服务器上的积压,这可能需要非常长的时间(如分钟)。请允许用户在你的应用程序中继续,最多禁用一些功能,直到GCM注册完成。Commonware所说的+1。恐怕OP误解了GCM固有的不可靠本质。为了与服务器进行可靠、基于请求-响应、有保证的传递或错误通信,我建议使用HTTP或基于TCP的自制协议。