iOS中後台運行

來源:互聯網
上載者:User

iOS在升級到4.0以後就支援了多任務了。下文將詳細介紹一下這個特性。

1、檢查裝置是否支援多任務

Apple出於效能的考慮,並不是所有的iOS裝置升級到iOS4以後都支援多任務,比如iPhone
3G。如果你的應用在沒有多任務特性時會出問題,為了保持應用的健壯性,你應該對此進行判斷並處理。你可以通過調用UIDevice對象的multitaskingSupported屬性來擷取當前裝置是否支援多任務。

if(![UIDevice currentDevice].multitaskingSupported){

//不支援多任務時應做的處理

}

2、基本多任務特性

通常,當使用者按一下Home鍵,當前應用就會被進入後台,應用處在後台運行狀 態一小段時間後,就會進入掛起(suspend)狀態,此時應用不會再執行任何代碼。如果系統在運行其他應用時記憶體資源不足,這個掛起的應用甚至有可能被 系統退出,釋放記憶體以供活動的應用使用。只有當使用者再次運行此應用,應用才會從掛起狀態喚醒,代碼得以繼續執行。這就是iOS4帶來的基本的多任務特性,這個特性是一般應用預設支援的,就是說你的應用不需要任何修改就能支援基本多任務特性。

既然是多任務你應該會在應用進入後台時做一些處理,比如暫停一些介面的定時重新整理或網路請求。同時,或者你會在程式進入前台時執行一些恢複操作。在你的應用的application delegate裡有2個訊息用於處理這些訊息:

- (void)applicationDidEnterBackground:(UIApplication *)application {
//進入後台時要進行的處理
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
//進入前台時要進行的處理
}

當然你也許不會都在application delegate處理所有的事情。如果你要在其他對象中處理,那麼你就需要註冊系統通知了,這兩個通知分別是UIApplicationDidEnterBackgroundNotification和UIApplicationWillEnterForegroundNotification。

也許你需要更多的多任務特性,比如後台播放音樂或者是後台進行GPS跟蹤。這會是下面介紹的內容。

3、後台播放音樂

通常,一般應用在進入後台時,任何聲音就將會停止。這也許不是我們所想要的。要想讓自己的應用支援後台播放,首先要修改應用的Info.plist 檔案,你需要在Info.plist檔案中添加UIBackgroundModes欄位,該欄位的值是應用支援的所有後台模式,是一個數群組類型。目前此數
組可以包含“audio”、“location”和“voip”這三個字串常量,如果要支援後台音樂播放,你就需要包含“audio”,其餘兩個會將在 後面講到。

同時,你也應該設定一下應用程式的Audio Sesstion。這個是必需的,如果不設定Audio Sesstion,應用就可能進入後台時Audio Sesstion失活而停止播放。一般需要這麼設定就可以了:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

4、後台GPS跟蹤

和後台播放音樂類似,若要支援後台GPS跟蹤,你就需要在Info.plist檔案中UIBackgroundModes欄位對應的數組中增加“location”字串。

5、後台voip支援

由於voip應用需要一個長串連到伺服器,為了讓這類應用能正常工作,iOS中假如後台voip支援特性。為支援這一特性,需要在Info.plist檔案中UIBackgroundModes欄位對應的數組中增加“voip”字串。

此外你仍然需要配置一下你的網路連接,以便支援後台串連。iOS提供的網路連接庫有幾種,下面一一說明:

如果你使用的是NSStream,如NSInputStream或NSOutputStream,需要調用setProperty:forKey:將Key為NSStreamNetworkServiceType的value設定為NSStreamNetworkServiceTypeVoIP

如果你使用NSURLRequest,需要調用setNetworkServiceType:將網路類型設定為NSURLNetworkServiceTypeVoIP

如果你使用CFStream,如CFReadStreamRef或CFWriteStreamRef,需要調用 CFReadStreamSetProperty或CFWriteStreamSetProperty將 kCFStreamNetworkServiceType屬性設定為kCFStreamNetworkServiceTypeVoIP。


1.運行邏輯代碼:

-(void)execBackrgoundMethod

{
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
     */
 UIApplication* app = [UIApplication sharedApplication];  
 bgTask = [app beginBackgroundTaskWithExpirationHandler:^{  
     [app endBackgroundTask:bgTask];  
     bgTask = UIBackgroundTaskInvalid;  
     }];  
 // Start the long-running task and return immediately.  
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,  
     0), ^{  //在這裡寫你要在後運行行的代碼         
     [app endBackgroundTask:bgTask];  
     bgTask = UIBackgroundTaskInvalid;  
     }); 
}


2.後台彈出UILocalNotification:

 - (void)scheduleAlarmForDate:(NSDate*)theDate  
 {  
//theDate延遲多長時間彈出
     UIApplication* app = [UIApplication sharedApplication];  
     NSArray* oldNotifications = [app scheduledLocalNotifications];  
     // Clear out the old notification before scheduling a new one.  
     if ([oldNotifications count] > 0)  
     [app cancelAllLocalNotifications];  
     // Create a new notification.  
     UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];  
     if (alarm)  
     {  
     alarm.fireDate = theDate;  
     alarm.timeZone = [NSTimeZone defaultTimeZone];  
     alarm.repeatInterval = 0;  
     alarm.soundName = @"alarmsound.caf";  
     alarm.alertBody = @"Time to wake up!";  
     [app scheduleLocalNotification:alarm];  
     }  
 } 

For more details, please click the link below:

https://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

http://mobile.tutsplus.com/tutorials/iphone/ios-multitasking-local-notifications/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.