У меня возникла неприятная проблема с последней версией Flurry (Flurry iPhone SDK v2.5). Когда я запускаю свое приложение, быстро выхожу, затем перезапускаю приложение, приложение ненадолго загружается, мерцает черный экран, а затем остается на черном экране. Черный экран остается там, пока я не нажму кнопку «Домой», после чего я могу перезапустить приложение в обычном режиме. Я изучил это дальше, и оказалось, что делегаты состояния приложения вызываются в неправильном порядке:
- applicationDidBecomeActive //приложение завершает загрузку в первый раз
- applicationWillResignActive //приложение начинает увольняться
- applicationWillEnterForeground // В этот момент я быстро перезапустил приложение, и это называется
- applicationDidEnterBackground //При вызове этого делегата экран становится черным
- applicationDidEnterBackground // Это вызывается, когда я снова нажимаю кнопку «Домой», после того как экран некоторое время зависал.
Я думаю, что это означает, что некоторым процессам требуется немного больше времени для завершения после того, как я нажму кнопку «Домой», и если я попытаюсь снова запустить приложение слишком быстро, возникнет очень странное поведение. Если я подожду несколько секунд, чтобы перезапустить приложение, оно будет вести себя нормально.
Чтобы продемонстрировать эту проблему, я создал самое простое приложение, которое смог придумать, и опубликую его здесь. Я построил это с помощью XCode 3.2.3 в сборке 4.0 непосредственно на моем устройстве iphone (iphone 4). Это важно, потому что я не смог воспроизвести эту проблему на симуляторе. Вы можете воспроизвести это приложение, создав новый проект на основе навигации с именем simpleApp и вставив этот код с вашим собственным ключом API Flurry. конечно. Вот простой AppAppDelegate.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
А вот и простой AppAppDelegate.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, но что-то подобное может привести к тому, что мое приложение будет отклонено.