快應(yīng)用的生命周期

快應(yīng)用的生命周期

  • 頁(yè)面的生命周期:onInit贾富、onReady蓝撇、onShow、onHide缭裆、onDestroy键闺、onBackPress、onMenuPress
  • 頁(yè)面的狀態(tài): 顯示澈驼、隱藏艾杏、銷毀
  • APP的生命周期:onCreate、onDestroy

頁(yè)面的生命周期接口的調(diào)用順序:

  • 打開頁(yè)面A:onInit() -> onReady() -> onShow()
  • 在頁(yè)面A打開頁(yè)面B:onHide()
  • 從頁(yè)面B返回頁(yè)面A:onShow()
  • A頁(yè)面返回:onBackPress() -> onHide() -> onDestroy()

頁(yè)面的生命周期

由于頁(yè)面通過(guò) ViewModel 渲染盅藻,那么頁(yè)面的生命周期指的是 ViewModel 的生命周期购桑,包括常見:onInit、onReady氏淑、onShow在頁(yè)面創(chuàng)建時(shí)觸發(fā)調(diào)用勃蜘。

onInit()

表示 ViewModel 的數(shù)據(jù) (event,props,data)已經(jīng)準(zhǔn)備好;所以你可以使用 props, data中的數(shù)據(jù)

    data: {
       // 生命周期的文本列表
        lcList:[]
    },
    onInit() {
        this.$page.setTitleBar({text: '生命周期'})
        this.lcList.push('onInit')
        
        console.info('觸發(fā):onInit')
        console.info('執(zhí)行:獲取data的lcList屬性: ${this.lcList}')
    }

onReady()

表示 ViewModel 的模板已經(jīng)編譯完成假残,所以你可以獲取DOM節(jié)點(diǎn)

    onReady() {
        this.lcList.push('onReady')
        
        console.info('觸發(fā):onReady')
        console.info('執(zhí)行:獲取模板節(jié)點(diǎn) ${this. rootElement()}')
    }

onShow(),onHide()

App中可以同時(shí)運(yùn)行多個(gè)頁(yè)面缭贡,但是每次只能顯示其中一個(gè)頁(yè)面;這點(diǎn)不同與純前端開發(fā)辉懒,瀏覽器頁(yè)面中每次只能有一個(gè)頁(yè)面阳惹,當(dāng)前頁(yè)簽打開另一個(gè)頁(yè)面,
上一個(gè)頁(yè)面就銷毀了眶俩;不過(guò)和SPA開發(fā)倒有點(diǎn)相似莹汤,切換頁(yè)面但瀏覽器全局Context是共享的

所以頁(yè)面的切換,就產(chǎn)生了新的事件:頁(yè)面被切換隱藏時(shí)調(diào)用onHide(),頁(yè)面被切換重新顯示時(shí)就調(diào)用onShow()

判斷頁(yè)面的顯示狀態(tài)颠印,可以調(diào)用 ViewModel 的 ¥visible 屬性:true:顯示 false:隱藏

    onShow() {
        this.lcList.push('onShow')
        
        console.info('觸發(fā):onShow')
        console.info('執(zhí)行:獲取頁(yè)面顯示狀態(tài)屬性 ${this.visible}') // true
    }
    onHide() {
        this.lcList.push('onHide')
        
        console.info('觸發(fā):onHide')
        console.info('執(zhí)行:獲取頁(yè)面顯示狀態(tài)屬性 ${this.visible}') // false
    }
    

onDestroy()

頁(yè)面被銷毀時(shí)調(diào)用纲岭,被銷毀的可能原因有:

  1. 用戶從當(dāng)前頁(yè)面返回到上一個(gè)頁(yè)面
  2. 用戶打開了太多的頁(yè)面,架構(gòu)自動(dòng)銷毀部分頁(yè)面线罕,避免占用資源

頁(yè)面銷毀時(shí)應(yīng)該做一些釋放資源的操作止潮,比如:取消訂閱監(jiān)聽 geolocation.unsubscribe()

判斷頁(yè)面是否處于被銷毀狀態(tài),可以調(diào)用 ViewModel 的 $valid 屬性:
true: 存在 false:銷毀

    onDestroy() {
        this.lcList.push('onDestroy')
        
        console.info('觸發(fā):onDestroy')
        console.info('執(zhí)行:獲取頁(yè)面被銷毀钞楼,銷毀狀態(tài) ${this. $.valid},應(yīng)該做取消接口訂閱監(jiān)聽的操作:geolocation.unsubsrible()')
        setTimeout(function() {
            console.info('執(zhí)行:頁(yè)面已被銷毀喇闸,不會(huì)執(zhí)行')
        }.bind(this), 0)
    }

onBackPress()

當(dāng)用戶點(diǎn)擊 返回實(shí)體按鈕、左上角返回按鈕询件、調(diào)用返回API時(shí)觸發(fā)該事件

如果事件響應(yīng)方法最后返回 true 表示不返回燃乍,自己處理業(yè)務(wù)邏輯;
否則:不返回?cái)?shù)據(jù)雳殊,或者返回其它數(shù)據(jù)

    onBackPress() {
        this.lcList.push('onBackPress')
        
        // true:表示自己處理橘沥,否則默認(rèn)返回上一頁(yè)
        // return true
    }

onMenuPress()

當(dāng)使用原生的頂部標(biāo)題欄時(shí),可以通過(guò)manifest.json中的menu屬性配置是否顯示右上角的菜單

   "display": {
        "titleBarBackgroundColor": "#000000",
        "titleBarTextColor": "#ffffff",
        "backgroundColor": "#efefef",
        "menu": true, #菜單欄是否顯示
        "pages": { # 對(duì)應(yīng)每個(gè)頁(yè)面的顯示設(shè)置
            "Home": {
                "titleBarText": "Gank",
                "menu": true // 菜單標(biāo)題欄顯示
            },
            "About": {
                "titleBarText": "關(guān)于",
                "menu": false // 菜單標(biāo)題欄隱藏
            }
        }
    }

    onMenuPress() {
        this.lcList.push('onMenuPress')
        
        console.info('觸發(fā):onMenuPress()')
    }

頁(yè)面的狀態(tài)

App中允許多個(gè)頁(yè)面同時(shí)存在并運(yùn)行夯秃,但當(dāng)前僅顯示其中一個(gè)座咆,因此每個(gè)頁(yè)面就會(huì)處于多個(gè)狀態(tài)的一個(gè)狀態(tài)

  • 顯示:該頁(yè)面就是當(dāng)前APP正在顯示的頁(yè)面痢艺,用$visible判斷
  • 隱藏:該頁(yè)面上打開新頁(yè)面后,該頁(yè)面被隱藏介陶,用$visible判斷
  • 銷毀:該頁(yè)面因某原因銷毀后堤舒,就不會(huì)再執(zhí)行里面的代碼,用$valid判斷

APP的生命周期

APP的生命周期提供了兩個(gè)回調(diào)函數(shù):onCreate, onDestroy,可以app.ux中定義回調(diào)函數(shù)

export default {
    onCreate() {
        console.info('Application onCreate')
    },
    
    onDestroy() {
        console.info('Application onDestroy')
    },
    
    // 定義APP數(shù)據(jù)舌缤,可以通過(guò) this.$app.$def.globalData訪問
    globalData: {
        name: '這是App存的數(shù)據(jù)'
    },
    // 定義App全局方法某残,可以通過(guò) this.$app.$def.mehtod()訪問
    method() {
        console.info('這是app的方法')
    },
    // mainfest
}

關(guān)于$app與$app.$def

$app與$app.$def(后面簡(jiǎn)稱$def)是兩個(gè)不同的對(duì)象;

前者代表框架為開發(fā)者暴露提供的APP對(duì)象玻墅;后者代表開發(fā)者在app.ux中導(dǎo)出的對(duì)象介牙,放置業(yè)務(wù)相關(guān)的全局?jǐn)?shù)據(jù)和方法;

前者對(duì)象擁有onCreate, onDestroy生命周期澳厢;當(dāng)應(yīng)用啟動(dòng)時(shí)會(huì)執(zhí)行onCreate方法,里面執(zhí)行this.variable1的賦值是在$app對(duì)象上剩拢;

后者對(duì)象中的onCreate, onDestroy方法并不會(huì)執(zhí)行,作用僅僅只是把方法復(fù)制到前者對(duì)象上而已徐伐;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贯钩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呵晨,更是在濱河造成了極大的恐慌魏保,老刑警劉巖摸屠,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粱哼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胯舷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門桑嘶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人逃顶,你說(shuō)我怎么就攤上這事∫哉” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵废菱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我殊轴,道長(zhǎng),這世上最難降的妖魔是什么梳凛? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任梳杏,我火速辦了婚禮,結(jié)果婚禮上十性,老公的妹妹穿的比我還像新娘。我一直安慰自己楷掉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布烹植。 她就那樣靜靜地躺著,像睡著了一般草雕。 火紅的嫁衣襯著肌膚如雪固以。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天诫钓,我揣著相機(jī)與錄音,去河邊找鬼菌湃。 笑死遍略,一個(gè)胖子當(dāng)著我的面吹牛场梆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播或油,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼驰唬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辖佣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搓逾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后世蔗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朗兵,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年寸爆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盐欺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冗美,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出务嫡,到底是詐尸還是另有隱情漆改,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布挫剑,位于F島的核電站柱衔,受9級(jí)特大地震影響愉棱,放射性物質(zhì)發(fā)生泄漏哲戚。R本人自食惡果不足惜奔滑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一顺少、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脆炎,春花似錦、人聲如沸秒裕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梭稚。三九已至,卻和暖如春哨毁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背想幻。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工话浇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幔崖。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吉嫩,于是被迫代替她去往敵國(guó)和親嗅定。 傳聞我的和親對(duì)象是個(gè)殘疾皇子自娩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 懶得處理樣式了, 將就著看吧. 官網(wǎng)地址: https://developer.android.com/topic...
    Reddington_604e閱讀 1,649評(píng)論 0 1
  • 1.什么是Activity?問的不太多惠奸,說(shuō)點(diǎn)有深度的 四大組件之一,一般的,一個(gè)用戶交互界面對(duì)應(yīng)一個(gè)activit...
    JoonyLee閱讀 5,729評(píng)論 2 51
  • 啟動(dòng)與銷毀Activity 不同于使用 main() 方法啟動(dòng)應(yīng)用的其他編程范例恰梢,Android 系統(tǒng)會(huì)通過(guò)調(diào)用對(duì)...
    安卓Boy閱讀 1,765評(píng)論 3 5
  • 今天閱讀的是223-397頁(yè),約為整本書進(jìn)度的61%共虑,今天閱讀目錄主題是識(shí)別細(xì)分市場(chǎng)、品牌定位妈拌、制定產(chǎn)品戰(zhàn)略和服務(wù)...
    Aream閱讀 188評(píng)論 6 5
  • 時(shí)光飛逝蓬蝶,今天正月初六,已是國(guó)家法定春節(jié)假期的最后一天丸氛。從明天起,各行各業(yè)的人們就開始正式上班或開工了缓窜。 中國(guó)幅員...
    剽墨人生閱讀 295評(píng)論 0 0