【问题标题】:Reload application data when the app comes into foreground?当应用程序进入前台时重新加载应用程序数据?
【发布时间】:2011-04-25 23:39:13
【问题描述】:

我是 iPhone 开发的新手。我正在构建一个从本地 sqlite3 数据库加载数据的应用程序

-   (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   

当我点击 iPhone 按钮并将其置于背景中,然后我回想起它时,我会以与离开时相同的方式看到(正常)该应用程序。我想做的是,当它进入前台时,重新加载数据,就好像它是从头开始调用的一样。

正确的做法是什么?
提前致谢。

【问题讨论】:

    标签: ios multitasking


    【解决方案1】:

    我认为那是 UIApplication 的代表:

    - (void)applicationWillEnterForeground:(UIApplication *)application
    

    在 iOS 4.0 及更高版本中,此方法是 被称为从 活动状态的背景。 您可以使用此方法撤消许多 您对您所做的更改 进入后申请 背景。对该方法的调用是 总是接着打电话给 applicationDidBecomeActive:方法, 然后将应用程序从 从非活动到活动状态。

    【讨论】:

      【解决方案2】:

      所以在 App Delegate 类中 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 只会在你第一次进入应用时调用,然后调用- (void)applicationDidBecomeActive:(UIApplication *)application

      如果你的 iphone iOS 是 4.0 或更高版本,当用户点击主页按钮时,它会先调用- (void)applicationWillResignActive:(UIApplication *)application,然后调用- (void)applicationDidEnterBackground:(UIApplication *)application

      然后应用程序将在后台运行,直到用户将其杀死。当用户再次进入应用时,会先调用- (void)applicationWillEnterForeground:(UIApplication *)application,然后调用- (void)applicationDidBecomeActive:(UIApplication *)application

      与您的问题相关,您应该致电applicationWillEnterForeground:applicationDidBecomeActive: 重新加载您的数据。尽管在 xcode 对这些方法的评论中,Apple 建议使用 applicationDidBecomeActive: 重新启动暂停的任务和/或更新用户界面;在applicationWillEnterForeground:中,您可以撤消您在进入后台时所做的更改。


      所以为了更容易看到,我给每个方法都加上了一个数字标签。这是要调用的方法的时间。

      0 application:(UIApplication *)application didFinishLaunchingWithOptions: 
      1 applicationDidBecomeActive: 
      2 applicationWillResignActive: 
      3 applicationDidEnterBackground: 
      4 applicationWillEnterForeground: 
      
      • 先进入app:调用0,再调用1;

      • 点击主页按钮:呼叫 2,然后呼叫 3;

      • 双击home键(多任务):调用2;

        • 如果用户选择另一个应用程序或再次点击主页按钮:调用 3;

        • 如果用户再次双击主页按钮:调用 1;

      • 再次进入应用:先调用4,再调用1;

      【讨论】:

        【解决方案3】:
        - (void)applicationDidBecomeActive:(UIApplication *)application {
        }
        

        在应用程序代理的上述函数中重新加载数据以在应用程序进入前台时刷新数据。

        【讨论】:

        • 我在这里看到实际刷新系统首选项(standardUserDefaults)的延迟一个周期。例如,1. 应用到后台 2. 更改应用偏好 3. 应用到前台:没有变化! 4. 应用到后台 5. 应用到前台:就是这样!
        • 疯了,所以我认为在调用 after applicationDidBecomeActive() 之前系统首选项不会保存默认值。我之所以确定这一点,是因为如果我只是在我的应用程序中每隔一秒左右打印一次值,它就是最新的。
        • 你可以通过 [[NSUserDefaults standardUserDefaults] synchronize] 来强制同步用户默认值;
        【解决方案4】:

        当 iOS 通知它应该在后台运行时,您可以exit()您的应用程序,如下所示:

        - (void)applicationDidEnterBackground:(UIApplication *)application {
          exit(0);
        }
        

        【讨论】:

        • 我不会手动执行此操作 - 对于不希望在后台运行的应用程序,有一个 UIApplicationExitsOnSuspendInfo.plist 键。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-10
        相关资源
        最近更新 更多