RegisterForRemoteNotificationTypes导致UI挂起

时间:2013-02-07 00:13:25

标签: ios xamarin.ios push-notification apple-push-notifications

我可以成功注册推送通知的应用程序:

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. 掩盖用户界面冻结?

1 个答案:

答案 0 :(得分:1)

您是否覆盖了公共覆盖void RegisteredForRemoteNotifications(UIApplication application,NSData deviceToken)

public override void FailedToRegisterForRemoteNotifications(UIApplication application,NSError error)

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