应用程序在使用最新Flurry SDK和ios4重新启动时挂起

应用程序在使用最新Flurry SDK和ios4重新启动时挂起,ios4,flurry,Ios4,Flurry,我对最新版本的Flurry(Flurry iPhone SDK v2.5)有一个令人沮丧的问题。当我启动应用程序时,快速退出,然后重新启动应用程序,应用程序短暂加载,闪烁黑屏,然后保持在黑屏上。在按下home(主页)按钮之前,黑屏一直存在,此时我可以正常重启应用程序。我进一步研究了这一点,发现应用程序状态代理的调用顺序错误: ApplicationIDBECOMEACTIVE//app第一次完成加载 applicationWillResignActive//应用程序开始退出 applicatio

我对最新版本的Flurry(Flurry iPhone SDK v2.5)有一个令人沮丧的问题。当我启动应用程序时,快速退出,然后重新启动应用程序,应用程序短暂加载,闪烁黑屏,然后保持在黑屏上。在按下home(主页)按钮之前,黑屏一直存在,此时我可以正常重启应用程序。我进一步研究了这一点,发现应用程序状态代理的调用顺序错误:

  • ApplicationIDBECOMEACTIVE//app第一次完成加载
  • applicationWillResignActive//应用程序开始退出
  • applicationWillEnterForeground//此时,我已经快速重新启动了应用程序,这被称为
  • ApplicationIdentinterBackground//调用此委托时,屏幕变黑
  • applicationIdentinterbackground//在屏幕挂起一段时间后,当我再次按下home按钮时,会调用此函数
  • 因此,我认为这意味着,一旦我按下home(主页)按钮,一些进程需要更长的时间才能结束,如果我尝试再次快速启动应用程序,就会出现一些非常奇怪的行为。如果我等待几秒钟重新启动应用程序,应用程序将正常运行

    为了演示这个问题,我创建了我能想到的最简单的应用程序,我将在这里发布。我是用XCode 3.2.3构建的,在4.0版本中直接构建到我的iphone设备(iPhone4)上这很重要,因为我无法在模拟器上重现此问题。您可以通过创建一个名为simpleApp的基于导航的新项目来重现此应用程序,当然,您可以使用自己的Flurry API密钥将此代码放入。 下面是SimpleAppPDelegate.m:

    #import "simpleAppAppDelegate.h"
    #import "RootViewController.h"
    #import "FlurryAPI.h"
    
    
    @implementation simpleAppAppDelegate
    
    @synthesize window;
    @synthesize navigationController;
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
        [FlurryAPI startSession:@"<your api key here>"];    
    
        [window addSubview:navigationController.view];
        [window makeKeyAndVisible];
    
        return YES;
    }
    
    
    - (void)applicationWillResignActive:(UIApplication *)application {
        printf("applicationWillResignActive\n");
    }
    
    
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        printf("applicationDidEnterBackground\n");
    }
    
    
    - (void)applicationWillEnterForeground:(UIApplication *)application {
        printf("applicationWillEnterForeground\n");
    }
    
    
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        printf("applicationDidBecomeActive\n");
    }
    
    
    - (void)applicationWillTerminate:(UIApplication *)application {
        printf("applicationWillTerminate\n");
    }
    
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    }
    
    - (void)dealloc {
        [navigationController release];
        [window release];
        [super dealloc];
    }
    
    @end
    
    #导入“simpleAppPDelegate.h”
    #导入“RootViewController.h”
    #导入“FlurryAPI.h”
    @SimpleAppPDelegate的实现
    @合成窗口;
    @综合导航控制器;
    -(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项{
    [FlurryAPI startSession:@”“;
    [窗口添加子视图:navigationController.view];
    [WindowMakeKeyandVisible];
    返回YES;
    }
    -(无效)应用程序将重新签名:(UIApplication*)应用程序{
    printf(“applicationWillResignActive\n”);
    }
    -(无效)应用程序标识符背景:(UIApplication*)应用程序{
    printf(“applicationIdentinterbackground\n”);
    }
    -(无效)应用程序将进入前台:(UIApplication*)应用程序{
    printf(“applicationWillEnterForeground\n”);
    }
    -(无效)应用IDBECOMEACTIVE:(UIApplication*)应用{
    printf(“applicationdidebecomeactive\n”);
    }
    -(无效)申请将终止:(UIApplication*)申请{
    printf(“applicationWillTerminate\n”);
    }
    -(无效)应用程序IDReceiveMemoryWarning:(UIApplication*)应用程序{
    }
    -(无效)解除锁定{
    [导航控制器释放];
    [窗口释放];
    [super dealoc];
    }
    @结束
    
    这里是SimpleAppPDelegate.h:

    #import <UIKit/UIKit.h>
    
    @interface simpleAppAppDelegate : NSObject <UIApplicationDelegate> {
    
        UIWindow *window;
        UINavigationController *navigationController;
    }
    
    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
    
    @end
    
    #导入
    @接口SimpleAppPDelegate:NSObject{
    UIWindow*窗口;
    UINavigationController*导航控制器;
    }
    @属性(非原子,保留)IBUIWindow*window;
    @属性(非原子,保留)IBuinavigationController*导航控制器;
    @结束
    
    所以不管怎样,因为这么多应用程序都在使用Flurry,我觉得我一定错过了一些非常基本的东西。真正让我吃惊的是,我根本没有发现有人抱怨这个问题此外,这与以前版本中的问题不同,在以前版本中,应用程序会立即启动,变黑几秒钟,然后正常恢复。通过调用[FlurryAPI setSessionReportsOnCloseEnabled:false]解决了该问题;在我设置会话之后,但在这种情况下没有帮助。


    不管怎样,还有其他人有这个问题吗?我真的希望这只是我一个愚蠢的错误。我真的很高兴使用Flurry,但类似的东西会导致我的应用程序被拒绝。

    我不确定是应该在原始帖子的评论中回答我自己的问题,还是发布答案,但无论如何,答案如下:

    Flurry已被破解,其他人已在此apple dev论坛线程上确认(您需要一个帐户才能登录):


    希望Flurry能尽快推出新版本,我真的很想将他们的产品整合到我的应用程序中。

    我们刚刚发布了新版本的iPhone Flurry SDK,应该可以解决这个问题。请下载此新SDK,并告知我们它是否解决了您遇到的问题

    -- 真诚地

    -希拉


    Flurry支持

    我给Flurry写了这篇文章,他们很快回复我,他们会调查此事。大约一周后,他们回信说他们在现在可用的v2.6中修复了它。我似乎再也不能重现这个问题了


    我不是说我很厉害或者什么的,但是我一个人解决了这个bug。

    我从flurry那里得到了这个。版本2.7也有问题,但:

    [FlurryAPI setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose];
    

    默认情况下,此选项处于启用状态。启用后,Flurry将在退出应用程序时尝试发送会话数据,就像在启动应用程序时一样。这将提高应用程序分析的更新速度,但会由于网络延迟而延长应用程序终止过程。在某些情况下,网络延迟可能会导致应用程序崩溃。

    2.7在加载和应用程序加载时都会崩溃。对2.7的补丁有更新吗?没有。当我快速切换回应用程序时,它会挂起几秒钟。可以确认API的最新更新解决了问题!最新的Flurry SDK今天仍然存在此问题