Flurry の最新バージョン (Flurry iPhone SDK v2.5) でイライラする問題があります。アプリを起動し、すぐに終了してアプリを再起動すると、アプリが短時間読み込まれ、黒い画面がちらつき、黒い画面のままになります。ホームボタンを押すまで黒い画面が表示されたままになり、その時点でアプリを通常どおり再起動できます。これをさらに調べたところ、アプリの状態デリゲートが間違った順序で呼び出されていることがわかりました。
- applicationDidBecomeActive //アプリは最初の読み込みを終了します
- applicationWillResignActive //アプリは辞任を開始します
- applicationWillEnterForeground //この時点で、すぐにアプリを再起動しました。これが呼び出されます
- applicationDidEnterBackground //このデリゲートが呼び出されると、画面が黒くなります
- 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 を使用することに非常に興奮していますが、このようなことをすると、アプリが拒否される可能性があります。