6

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

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

但每当我执行此操作时,我的 UI 通常会挂起 2-3 秒。即使我按照建议在应用程序生命周期的早期拥有它(例如,甚至WillFinishLaunching),一旦我的第一个 ViewController 加载,我的 UI 仍然会挂起。

我的第一个想法是在单独的线程中执行注册,但 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冻结?
4

1 回答 1

1

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

或者

public override void FailedToRegisterForRemoteNotifications(UIApplication 应用程序,NSError 错误)

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

于 2013-05-31T13:50:58.310 回答