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