◆陳俁男 曾海杰 莊鎮濤 溫漢清
關于車輛疏導系統搭建及優化研究
◆陳俁男 曾海杰 莊鎮濤 溫漢清
(廣東石油化工學院 廣東 525000)
隨著社會經濟的發展,人民生活水平的提高,車輛扎堆寸步難行,這是我國“城市病”的典型癥狀。堵車很大原因是車輛行駛沒有全局規劃,本項目在高德API下二次開發,設計并搭建了基于SMM架構的車輛疏導系統。本文從軟件技術出發,完成車輛管理服務器端的設計和終端APP開發,再使用相應指標對該系統進行了效率分析與性能檢測。
車輛疏導;系統搭建;效率分析
Spring Boot是一個基于Spring框架,可供快速開發,特別適合構建微服務系統。其另外還封裝了各類套件,比如mybatis、hibernate、redis、mongodb等。該框架搭建起來的應用,它會嵌入Tomcat、Jetty或者Undertow等服務器,并且不需要傳統的WAR文件進行部署,也就是說搭建SpringBoot項目并不需要單獨下載Tomcat等傳統的服務器;同時提供通過 Maven(或者Grandle)依賴的starter,這些starter可以直接獲取開發所需的相關包,通過這些starter項目就能JavaApplication的形式運行Spring Boot的項目,而無須其他服務器配置;對于配置,Spring Boot提供Spring框架的最大自動化配置,大量使用自動配置,使得開發者對Spring的配置盡量減少;此外還提供了一些監測、自動檢測的功能和外部配置,與此同時沒有附加代碼和XML的配置要求。
本項目在高德API下二次開發,設計并搭建了基于SMM架構的車輛疏導系統,本次設計是在Windows 平臺下,使用 Spring Boot作為系統的后臺整體基礎架構,使用Java語言完成終端安卓APP的編寫,項目使用阿里云服務器部署并上線。系統功能包括車輛報備、車輛定位、路線規劃、路程反饋等,疏導系統會根據目的地、出發地以及路徑策略設置,為用戶量身設計出行方案。同時可結合實時交通,幫助用戶繞開擁堵路段,提供更貼心、更人性化的出行體驗。
后臺采取stringboot+mysql+mybatis搭建服務器接口,實現數據傳輸及存儲。stringboot來管理整個應用中所有對象的創建、初始化、銷毀,及對象間關聯關系的維護。同時作為 View 層的實現者,完成用戶的請求接收功能,完成用戶請求的轉發及對用戶的響應。mysql是服務器數據庫,MyBatis作為 Dao 層的實現者實現對用戶車輛信息、車輛軌跡、信息推送等數據庫的增刪改查功能。
APP由主應用服務中間層以及后臺管理系統相配合,通過app、數據庫的設計,以及對服務器和支付api的引用,實現一套完整的車輛疏導。終端采取MVP架構搭建app框架,使用面向接口編程思想將View層與Model層進行完全分離,業務代碼和邏輯代碼解耦;主界面UI采用View Pager 嵌套Fragment的方式,進行完全lazyLoad,根據Fragment生命周期的可見性來判斷界面的可見性來加載網絡數據,優化網絡api的設置,減少數據解析時間和網絡訪問時間,提高性能;界面內的通信均采用jetpack liveData,以及lifecycleHandler進行通信,有效防止數據丟失及不必要的內存泄露;網絡模塊使用Retrofit加載網絡數據,對獲取到的數據進行解析并序列化,結合DiskLruCache實現二級緩存,達到節省流量的同時,也能免去重復地解析數據的步驟,提高APP整體的瀏覽流暢度。圖片顯示基于glide做了圖片顯示的優化,尤其對gif圖片的優化,在原生基礎上進行了NDK層面優化,提升了glide性能,配合 PhotoView 實現圖片緩存同時,也實現圖片的放大縮小,防止OOM現象。
全類型消息:支持文字、表情、圖片、語音、視頻、附件、地理位置、擴展消息、透傳消息、自定義消息等全類型消息收發;實時音視頻:支持1對1、多對多音視頻、音視頻連麥等場景。低成本低延時、高品質、抗丟包抗抖動、百萬級并發、全球多節點覆蓋;推送服務:服務端支持對接APNS(蘋果)、Google、華為、小米、OPPO、VIVO、魅族等各大消息推送平臺;
多種路線規劃:駕車路線規劃、公交路線規劃、騎行路線規劃、步行路線規劃;自定義避讓區域或道路:想不走哪里就不走哪里;軌跡糾偏:針對定位偏移、定位缺失、定位間隔大等情況造成的軌跡異常,獵鷹提供基于路網和路徑規劃的軌跡糾偏補路功能,可將偏移點糾正到正確的道路上,呈現連貫、平滑的軌跡;空間檢索:提供多種空間檢索能力,支持檢索圓形、多邊形、行政區范圍內的終端,可實現搜索當前地圖視野內終端或指定區域內終端的功能;軌跡存儲:基于成熟穩定的阿里云服務,對用戶上傳的軌跡數據進行存儲,保證數據穩定;軌跡查詢:針對用戶已經上傳成功的軌跡,我們提供高性能的軌跡查詢服務,開發者可隨時查詢任意時間段的軌跡。
準確率高:準確率高于90%,基于海量大數據持續迭代,不斷優化識別精度;適用場景廣:對于道路卡口、出入口、街拍圖片均具有較好的識別效果,同時支持車身正向、側向等不同角度情況下的識別;交通車輛信息結構化:對于道路、停車場等各種監控場景,結構化車輛信息數據,可用于相關數據檢索或信息挖掘。
系統集成多組件開發,多耗電大戶同時運行。電量優化程度在一定程度上決定了用戶的體驗感。我們需要考慮的是如何優化電量使用,讓我們的 App 不會因為電量消耗過高被用戶排斥,或者被其他安全應用報告,以此確保用戶黏性。
問題解析:
(1)優化應用的后臺耗電:避免后臺長時間獲取 WakeLock、WiFi 和藍牙的掃描等。
(2)網絡優化:指定三種不同狀態消耗方案(Full power:高功率狀態,移動網絡連接被激活,允許設備以最大的傳輸速率進行操作;Low power:低功耗狀態,對電量的消耗差不多是 Full power 狀態下的 50%;Standby:空閑態,沒有數據連接需要傳輸,電量消耗最少。)
(3)計算優化(在 native 層開發時,可以利用 ARM neon 指令集做并行運算)
(4)界面優化(離開界面后停止相關活動,例如關閉動畫,耗電操作判斷前后臺,如果是后臺則不執行相關操作。)
(5)定位優化(根據場景謹慎選擇定位模式:對定位準確度沒那么高的場景可以選擇低精度模式??梢钥紤]網絡定位代替GPS。使用后務必及時關閉,減少更新頻率,例如定位開啟一定時間后超過某個閾值可以執行一個兜底策略:強制關閉GPS。)
1)確定重點:A 確認嚴重程度。B 優先解決 Top 崩潰或對業務有重大影響的崩潰:如啟動、支付過程的崩潰c Java 崩潰:如果是OOM,需進一步查看日志中的內存信息和資源信息,下面會分析。C Native 崩潰:查看signal、code、fault addr以及崩潰時的Java堆棧
2)查找共性:機型、系統、ROM、廠商、ABI 這些信息都可以作為共性參考,對于下一步復現問題有明確指引。
3)嘗試復現:復現之后再增加日志或使用 Debugger、GDB 進行調試。
使用以上步驟,我們解決了幾個常見的異常:
異常1:Android 7.0 Toast BadTokenException
解決:代理Toast里的mTN(handler)就可以實現捕獲異常
異常2:SharedPreference apply引起的ANR問題
解決:拿到 Hook ActivityThrad的Handler變量,給其設置一個Callback,Handler 的 dispatchMessage中會先處理callback。最后在Callback中調用隊列的清理工作,注意隊列清理需要反射調用QueuedWork。
異常3:TimeoutExceptin異常
解決:它是由系統的FinalizerWatchdogDaemon 拋出來的,我們對該異常進行了規避。stop 方法,在 Android 6.0 之前會有線程同步問題。因為 6.0 之前調用threadToStop的interrupt方法是沒有加鎖的,所以可能會有線程同步的問題。
需求:在APP中需要加載大量服務器圖片
難點:我們的APP需要申請一塊內存來存放圖片的時候,系統認為我們的程序需要的內存過大,不分配給我們的APP,拋出OOM異常
解決方案:1.異步開啟子線程進行耗時的操作,通過Handler+Message在子線程發送消息到主線程進行更新UI;2.對于加載圖片過多時導致的OOM內存溢出問題,引入ImageLoader開源框架解決,ImageLoader里的線程使用了線程池,從而避免了過多的線程頻繁的創建和銷毀;3.對圖片采用軟引用,及時進行recycle()操作及等比例縮小圖片;4.listview每次僅加載屏幕能顯示的內容,其余數據處于準備顯示狀態。
本文主要研究車輛疏導系統的搭建及優化問題。系統搭建完后,在電量優化、崩潰分析、內存抖動三個方面對系統進行了效率測試、異常捕捉及問題分析,并提供解決方案。實驗結果表明,經過我們的優化,達到節省流量同時,也能免去重復的解析數據的步驟,系統整體的穩定性和瀏覽流暢度得到了的很大的提升。
[1]陳鵬.基于Android應用的性能監控系統的研究與實現[D].華南理工大學,2015.
[2]李少杰.面向移動智能終端應用性能測試平臺的研究[D].華南理工大學,2014.
[3]黃琦.Android智能手機應用軟件自動化測試工具的設計和開發[D].安徽大學,2012.
本文為廣東石油化工學院2021年省級大學生創新創業計劃項目“基于Android的校園云拼車系統”(項目編號為733718)階段性研究成果