學(xué)習(xí) About iOS App Programming 第二天
創(chuàng)新互聯(lián)致力于網(wǎng)站制作、成都網(wǎng)站建設(shè),成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
------App States and Multitasking
對(duì)于app開發(fā)者,一定要很明確的知道app是運(yùn)行狀態(tài),如在前臺(tái)還是在后臺(tái)。因?yàn)樘O果系統(tǒng)不想安卓系統(tǒng)那用大方,蘋果系統(tǒng)的系統(tǒng)資源是有很多約束的,app在前臺(tái)和在后臺(tái)享受的待遇是很大不同。當(dāng)app在后臺(tái)時(shí),app會(huì)遭到系統(tǒng)一些限制,這樣為了改善電池的壽命和提高其他在前臺(tái)app的用戶體驗(yàn)。同時(shí)蘋果會(huì)及時(shí)進(jìn)行通知當(dāng)在進(jìn)行前后臺(tái)的轉(zhuǎn)化時(shí)。
當(dāng)我們的app在前臺(tái)運(yùn)行時(shí),系統(tǒng)會(huì)實(shí)時(shí)的為app捕抓觸碰事件。UIKit的基礎(chǔ)框架作了很多工作為傳遞事件。同時(shí)可以定制自己想要的響應(yīng)事件方法。如文本框輸入文字的捕抓。
為了開發(fā)一個(gè)比較優(yōu)秀的app,在技術(shù)上要對(duì)下面進(jìn)行一定的了解
Managing App State Changes ------ 根據(jù)app的狀態(tài)做出準(zhǔn)確的響應(yīng),這樣有利提高用戶體驗(yàn)和防止數(shù)據(jù)丟失。
Being a Responsible Background App ------ 當(dāng)app退到后臺(tái)以后,一定了解app能干神馬和將會(huì)發(fā)生啥。
Processing Queued Notifications at Wakeup Time
Background Execution and Multitasking ------- 了解怎樣在后臺(tái)很能工作。
Managing App State Changes
開發(fā)出來的app,無論在神馬時(shí)候,肯定是3-1表中的一種。app從一種到另一種狀態(tài)一定有相應(yīng)的事件對(duì)應(yīng)。
State | Description |
---|---|
Not running | app 還沒有運(yùn)行或者起來,處于結(jié)束狀態(tài)。 |
Inactive | app處于前臺(tái)但是當(dāng)時(shí)不能接受事件,這個(gè)狀態(tài)一般發(fā)生在狀態(tài)之間的轉(zhuǎn)換。 |
Active | app處于前臺(tái)同時(shí)能接受事件 |
Background | app在后臺(tái)和執(zhí)行代碼,大部分的app在這中狀態(tài)就是簡單暫停,但是還是有一些app在這個(gè)狀態(tài)還是能執(zhí)行一些任務(wù)的。 |
Suspended | app退到后臺(tái)同時(shí)不能執(zhí)行任務(wù)了。當(dāng)app轉(zhuǎn)到這種狀態(tài)是app就是自動(dòng)和不能前臺(tái)了。大部分時(shí)候是保存在內(nèi)存中。但是當(dāng)內(nèi)存吃緊時(shí),app也時(shí)候后不猶豫的被槍斃。 |
溫馨提示:在早期的ios版本是不能進(jìn)入后臺(tái)和暫停狀態(tài)的。同時(shí)一些設(shè)備不支持多任務(wù)和后臺(tái)執(zhí)行任務(wù)。這些是從ios4開始的。
The App Launch Cycle
當(dāng)app起來的時(shí)候,app從沒有運(yùn)行的狀態(tài)變化到激化狀態(tài)和后臺(tái)狀態(tài),之間都用短暫通過inactive state。作為啟動(dòng)周期的一部分,系統(tǒng)創(chuàng)建了一個(gè)流程和主線程對(duì)于app調(diào)用app的主要方法。這些主要方法都來至于xcode項(xiàng)目的control。如app基本配置。
Responding to Interruptions
1 當(dāng)一個(gè)報(bào)警級(jí)別的中斷發(fā)生了,比如一個(gè)電話打進(jìn)來了。app臨時(shí)轉(zhuǎn)變成inactive state,這樣促使用去去選擇接下來這樣處理進(jìn)程。這個(gè)app一直停留在未激活的狀態(tài),直到放棄這個(gè)報(bào)警級(jí)別的事情。在這個(gè)時(shí)候既可以轉(zhuǎn)到激活狀態(tài)或者后臺(tái)。
2 在ios5中,通知是展示一個(gè)"條幅",同時(shí)app不會(huì)進(jìn)入到未激活狀態(tài),這樣只是提醒用戶來了新的信息。同時(shí)用戶可以通過這個(gè)消息進(jìn)入其他app,讓當(dāng)前的app處于后臺(tái)或者未激活狀態(tài)。
3 當(dāng)按了Sleep/Wake button,app將退到非激活狀態(tài),當(dāng)用戶按了這個(gè)按鈕以后,系統(tǒng)將不能接受觸摸事件了,同時(shí)app會(huì)進(jìn)入后臺(tái)。
Moving to the Background
當(dāng)用戶觸發(fā)了進(jìn)入后臺(tái)的事件,如啟動(dòng)其他app,home按鈕等等,app將會(huì)先調(diào)applicationWillResignActive:這個(gè)代理方法,然后調(diào)用applicationDidEnterBackground:代理方法。所以當(dāng)app在進(jìn)入后臺(tái)之前需要做一些事情的時(shí)候,在這個(gè)兩個(gè)代理方法實(shí)現(xiàn)就行了。
app用applicationDidEnterBackground:這個(gè)代理方法能實(shí)現(xiàn)做進(jìn)入后臺(tái)的準(zhǔn)備工作。如
保存用戶數(shù)據(jù)和app狀態(tài)信息
釋放內(nèi)存
Memory Usage for Background Apps
開發(fā)者在設(shè)計(jì)app時(shí)一定要知道當(dāng)app進(jìn)入后臺(tái)以后釋放內(nèi)存。雖然系統(tǒng)會(huì)盡量會(huì)保存一些app在內(nèi)存中。但是當(dāng)內(nèi)存警告的時(shí)候還是會(huì)強(qiáng)行要app釋放。
在開發(fā)的過程中,我們一定要記住之時(shí)的移除強(qiáng)引用對(duì)象,這樣方便內(nèi)存空間的再次利用。同時(shí)當(dāng)我們?yōu)榱颂岣哂脩趔w驗(yàn),把一些對(duì)象放到內(nèi)存中去執(zhí)行,當(dāng)我們的app進(jìn)入后臺(tái)時(shí)一定要記得把這樣的對(duì)象從內(nèi)存中移除。
比如:照片,語音數(shù)據(jù)。
系統(tǒng)為了幫助app減少app所用內(nèi)存,系統(tǒng)會(huì)自動(dòng)的清理一些數(shù)據(jù),在進(jìn)入后臺(tái)前。
Returning to the Foreground
當(dāng)app重返前臺(tái)時(shí),會(huì)重啟因?yàn)榈胶笈_(tái)而停止的任務(wù)?;氐角芭_(tái)的流程是先會(huì)調(diào)用applicationWillEnterForeground,然后在調(diào)用applicationDidBecomeActive,這個(gè)兩個(gè)代理方法結(jié)束以后,app就是到前臺(tái)了
Processing Queued Notifications at Wakeup Time
app進(jìn)入暫停的狀態(tài)是必須去準(zhǔn)備一個(gè)操作任何消息的隊(duì)列當(dāng)它重返前臺(tái)或者后臺(tái)執(zhí)行狀態(tài)。雖然app在暫停狀態(tài)不能執(zhí)行任何代碼,但是為了確保不丟失方向的改變信息。系統(tǒng)的隊(duì)列把這些改變信息進(jìn)行記錄。當(dāng)app再次可以執(zhí)行代碼時(shí),把這些信息傳給app。
消息隊(duì)列將用主線程給app發(fā)送消息,同時(shí)它將在任何觸摸事件和用戶輸入之前。大多數(shù)app應(yīng)該能響應(yīng)這些事件。
app主run loop是用來連續(xù)響應(yīng)所有用戶相關(guān)的事件,UIApplication對(duì)象在起來的時(shí)間就是生成了一個(gè)run loop,它在app的主線程中。這樣保證了的用戶相關(guān)的事件能得到連續(xù)的響應(yīng)。
ios4以后,多任務(wù)可以在后臺(tái)運(yùn)行app,但是為了保護(hù)電池,很多app在進(jìn)入后臺(tái)以后就會(huì)暫停服務(wù)。
盡可能不要讓app在后臺(tái)運(yùn)行,如果app必須要在后臺(tái)運(yùn)行時(shí)。如:
需要完成至少一個(gè)認(rèn)為對(duì)特定的用戶。
需要執(zhí)行一個(gè)簡單定長的任務(wù)。
需要通知用戶一些警告級(jí)別的信息。
系統(tǒng)會(huì)盡可能的多保留app在內(nèi)存中,但是內(nèi)存吃緊的時(shí)候,系統(tǒng)會(huì)殺掉他們。留出足夠的內(nèi)存給前臺(tái)的app,這樣必須前臺(tái)app能得到較好的用戶體驗(yàn)。
對(duì)一些特殊的app需要很長的時(shí)間在后臺(tái)執(zhí)行,因?yàn)殚_發(fā)者需要獲得一些特定的權(quán)限,讓app可以在后臺(tái)長時(shí)間,一下一些情況可以申請(qǐng):
播放音頻內(nèi)容的app,想音樂播放器。
語音記錄app。
VoIP app
需要后臺(tái)下載的任務(wù)
系統(tǒng)一個(gè)app主線程,同時(shí)app自己可以創(chuàng)立其他線程去做其他任務(wù)。蘋果比較推薦用gcd和operation queue,創(chuàng)立自己的線程的好處是讓主線程去處理事件相應(yīng)。
開發(fā)者應(yīng)該使用隊(duì)列無論什么時(shí)候需要從主線程中脫離出來執(zhí)行任務(wù)。讓主線程處理事件和畫圖事件。開發(fā)者不必一定執(zhí)行在主線程上。比如app在等待網(wǎng)絡(luò)回調(diào)時(shí),這樣就可以放在queue執(zhí)行。
多線程的另一個(gè)好處是可以將任務(wù)移植到非主線程中,這樣app在起來的時(shí)候,主線程去進(jìn)行初始化和開始相應(yīng)事件,不會(huì)影響用戶體驗(yàn)。
分享名稱:學(xué)習(xí)AboutiOSAppProgramming第二天
分享地址:http://muchs.cn/article48/gjsdhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、ChatGPT、自適應(yīng)網(wǎng)站、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)