7

我对最新版本的 Flurry (Flurry iPhone SDK v2.5) 有一个令人沮丧的问题。当我启动我的应用程序,快速退出,然后重新启动应用程序时,应用程序会短暂加载,闪烁黑屏,然后停留在黑屏上。黑屏一直存在,直到我按下主页按钮,此时我可以正常重启应用程序。我对此进行了进一步调查,结果发现应用程序状态委托的调用顺序错误:

  1. applicationDidBecomeActive //app第一次加载完成
  2. applicationWillResignActive //app开始辞职
  3. applicationWillEnterForeground //至此,我已经快速重启了app,这就是所谓的
  4. applicationDidEnterBackground //调用这个委托时,屏幕变黑
  5. applicationDidEnterBackground //当我再次点击主页按钮时调用它,屏幕已经挂了一段时间。

所以我认为这意味着一旦我点击主页按钮,一些进程需要更长的时间才能结束,如果我太快地尝试再次启动应用程序,则会出现一些非常奇怪的行为。如果我等待几秒钟重新启动应用程序,应用程序会正常运行。

为了演示这个问题,我创建了我能想到的最简单的应用程序,我将在此处发布。我用 XCode 3.2.3 构建了这个,在 4.0 中直接构建到我的 iphone 设备(iphone 4)上。 这很重要,因为我无法在模拟器上重现此问题。 您可以通过创建一个名为 simpleApp 的新导航项目并将此代码放入其中,当然可以使用您自己的 Flurry API 密钥来重现此应用程序。这是 simpleAppAppDelegate.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

这里是 simpleAppAppDelegate.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

所以无论如何,因为有这么多应用程序都在使用 Flurry,我觉得我一定错过了一些非常基本的东西。真正让我难以置信的是,我根本没有发现任何人抱怨这个特殊问题。 此外,这与以前版本中的问题不同,以前版本的应用程序似乎立即启动,黑屏几秒钟,然后正常恢复。该问题已通过调用 [FlurryAPI setSessionReportsOnCloseEnabled:false] 解决;在我设置会话之后,但这在这种情况下没有帮助。

无论如何,其他人有这个问题吗?我真的希望这只是我的一个愚蠢的错误。我对使用 Flurry 感到非常兴奋,但这样的事情会导致我的应用程序被拒绝。

4

4 回答 4

6

我为此写了 Flurry,他们很快就回复我说他们会对此进行调查。大约一周后,他们回信说他们在现在可用的 v2.6 中修复了它。我似乎无法再重现该问题。

并不是说我很棒或其他什么,但我确实是单枪匹马地修复了这个错误。

于 2010-07-14T20:47:39.547 回答
2

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

Flurry 坏了,其他人已经在这个苹果开发论坛帖子上确认了(你需要一个帐户才能登录):https ://devforums.apple.com/thread/56339?tstart=0

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

于 2010-07-07T07:31:25.507 回答
2

我从慌乱中得到这个。2.7版也有问题,但是:

[FlurryAPI setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose];

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

于 2010-10-30T05:36:54.463 回答
1

我们刚刚发布了一个新版本的 iPhone Flurry SDK,应该可以解决这个问题。请下载这个新的 SDK,如果它解决了您遇到的问题,请告诉我们。

- 真挚地,

-希拉

乱舞支持

于 2010-07-13T23:54:43.173 回答