uni-app應(yīng)用異常退出時處理機(jī)制探究
一、前言
應(yīng)用uni-app跨端框架開發(fā)APP過程中,遇到以下新增需求:
應(yīng)用在閃崩或異常退出時,用戶希望正在填寫的大量信息可以得以保存。當(dāng)用戶再次打開APP時,之前未提交的信息可回顯。
剛開始會考慮到uni-app框架本身是否提供以上錯誤處理解決方案。但是,通過閱讀官方文檔,發(fā)現(xiàn)其并不提供針對以上問題的解決方案。需要項目開發(fā)人員自定義實現(xiàn)邏輯處理以上問題。
初讀以上需求,可以應(yīng)用uni-app提供的setStorage()與setStorageSync()內(nèi)置方法實現(xiàn)。
但是,以下問題需要考慮清楚:
何時調(diào)用以上方法緩存數(shù)據(jù),應(yīng)用定時任務(wù)setInterval(callback, delay, rest)?還是通過頁面【暫存】按鈕觸發(fā)緩存動作?
何時調(diào)用緩存中的數(shù)據(jù)信息進(jìn)行uni.getStorage()回顯?
何時調(diào)用uni.removeStorage()清空緩存中的數(shù)據(jù)信息?
給出的思考結(jié)果如下:
應(yīng)用定時任務(wù)setInterval(callback, delay, rest)調(diào)用以上緩存數(shù)據(jù)方法會存在設(shè)置的delay值過小,影響APP性能;delay值過大,會造成當(dāng)前用戶輸入信息還未暫存,用戶返回上一頁進(jìn)行其他操作導(dǎo)致當(dāng)前輸入信息未暫存問題,所以設(shè)置一個合適值至關(guān)重要,既能最大限度的做到不影響應(yīng)用性能,也能過做到保證數(shù)據(jù)完整性;通過頁面【暫存】按鈕觸發(fā)緩存動作,可以保證數(shù)據(jù)的完整性。但是以上2種策略均不能很好的解決應(yīng)用閃崩問題。
當(dāng)用戶從其他頁面重新進(jìn)入當(dāng)前信息維護(hù)頁時,調(diào)用緩存中的數(shù)據(jù)信息進(jìn)行uni.getStorage()回顯。
用戶登出時,調(diào)用uni.removeStorage()清空緩存中的數(shù)據(jù)信息。
二、實現(xiàn)機(jī)制
為應(yīng)對用戶異常退出場景,在用戶非正常退出(即并不是點擊【退出】按鈕退出系統(tǒng))時,保存用戶申請信息;
緩存的數(shù)據(jù)信息為【用戶ID + 企業(yè)ID】作為緩存主鍵,確保數(shù)據(jù)一致性、完整性,保障數(shù)據(jù)安全;
緩存內(nèi)存有數(shù)據(jù)信息時,就調(diào)用緩存中的數(shù)據(jù)信息,緩存內(nèi)無數(shù)據(jù)信息,則用戶重新錄入;
用戶點擊【退出】按鈕時,清除緩存信息;
考慮根據(jù)頁面生命周期函數(shù)進(jìn)行處理,在博文《跨平臺應(yīng)用開發(fā)進(jìn)階(一) :走近 uni-app》中介紹了頁面生命周期onHide()與onUnload(),我們注意到onHide()觸發(fā)的場景:
導(dǎo)航頁1---->導(dǎo)航頁2,會觸發(fā)導(dǎo)航頁1 onHide();
導(dǎo)航頁----->子頁面,會觸發(fā)導(dǎo)航頁 onHide();
子頁面1----->子頁面2,會觸發(fā)子頁面1 onHide();
切換到其他應(yīng)用時,觸發(fā)當(dāng)前頁面的onHide();
onUnload()觸發(fā)的場景:
從子頁面2返回到子頁面1,會觸發(fā)子頁面2的onUnload();
從子頁面返回到導(dǎo)航頁,會觸發(fā)子頁面的onUnload();
注意:
導(dǎo)航頁之間的切換不會觸發(fā)onUnload()。
頁面2返回到(頁面1或者導(dǎo)航頁)時,頁面2只會觸發(fā)onUnload(),并不會觸發(fā)onHide()。
由此可知,
在頁面生命周期onHide()與onUnload()應(yīng)用uni.setStorage()緩存用戶信息;
緩存的數(shù)據(jù)信息為【用戶ID + 企業(yè)ID】作為緩存主鍵,確保數(shù)據(jù)一致性、完整性,保障數(shù)據(jù)安全;
根據(jù)【用戶ID + 企業(yè)ID】緩存主鍵緩存應(yīng)用uni.getStorage()判斷緩存是否有數(shù)據(jù)信息,存在數(shù)據(jù)信息就調(diào)用緩存中的數(shù)據(jù)信息,緩存內(nèi)無數(shù)據(jù)信息,則用戶重新錄入;
用戶提交成功或點擊【退出】按鈕時,應(yīng)用uni.removeStorage()清除緩存信息;
注意??:清除緩存時應(yīng)注意防止出現(xiàn)內(nèi)存泄露問題!
三、拓展閱讀
《跨平臺應(yīng)用開發(fā)進(jìn)階(十) :uni-app 實現(xiàn)數(shù)據(jù)存儲、獲取和刪除》
《跨平臺應(yīng)用開發(fā)進(jìn)階(一) :走近 uni-app》
移動APP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。