5

我可以成功注册我的应用程序的推送通知:RegisterForRemoteNotificationTypes使UI挂起

UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(
    UIRemoteNotificationType.Alert 
    | UIRemoteNotificationType.Badge 
    | UIRemoteNotificationType.Sound); 

但每当我执行此,我的UI挂起一般2-3秒。即使我在推荐的应用生命周期早期(例如,即使是WillFinishLaunching),我的UI仍然会在我的第一个ViewController加载后挂起。

我首先想到的是在一个单独的线程来执行注册,但MonoTouch的防止这一点:

// From MonoTouch.UIKit 
public virtual void RegisterForRemoteNotificationTypes(UIRemoteNotificationType types) 
{ 
    UIApplication.EnsureUIThread(); 

我的下一个想法是至少弹出一个UIAlertView框,让用户知道的东西是怎么回事,但由于某种原因,直到发生登记后才显示,致使UIAlertView开放并立即关闭!

modalPopup = new UIAlertView("Working", "The application is loading...", null, null); 
modalPopup.Show(); 
// It doesn't show here! 
RegisterForRemoteNotificationTypes(); 
// It shows here! 
modalPopup.DismissWithClickedButtonIndex(0, true); 

如何,我不是

  1. 停止推送通知从占用我的UI线程
  2. 掩盖了UI冻结登记?

回答

1

你有没有覆盖的公共覆盖无效RegisteredForRemoteNotifications(UIApplication的应用,NSData的deviceToken)

公共覆盖无效FailedToRegisterForRemoteNotifications(UIApplication的应用,NSError错误)

我有过类似的问题在Registered ...函数中,我调用了一个Web服务来上传设备令牌。但网络调用不在另一个线程内,因此导致UI冻结。