編輯:關於Android編程
背景介紹:
這是一個webapp和nativeapp相結合的項目,webapp負責ui和業務邏輯,包含網絡請求、數據存儲、手機信息獲取、app統計分析、webapp和整體app升級控制,nativeapp負責給webapp提供網絡請求(跨域訪問),app統計分析(集成countly sdk)調用,升級資源的下載和解壓安裝;
其實這不是一個很好的架構設計,例如:app的一級菜單都是webapp,你想用戶每次點擊菜單都會發起網絡請求,所以一想項目中webapp跟nativeapp的層次關系就知道會出很多問題;
問題來了:
測試人員說webapp登錄有時候長達3-5秒,偶爾發生沒有規律,也是無法忍受的;因為在wifi環境下都如此,要是用戶在2G網路下,問題會放大的。
插曲:
webapp開發人員開始說server端登錄耗時長,在排除了server問題之後,開始說android網絡通信有問題,嗯,本人不太像bs前端工程師,可以理解,畢竟前端工程師從來就沒有考慮過手機系統優化問題,所有出現類似的請求也在意料之中。
問題尋找:
android工程師,看了自己的網絡代理代碼,如下:
public class HttpClientFactory { private static DefaultHttpClient client; public synchronized static DefaultHttpClient getThreadSafeClient() { if (client != null) return client; client = new DefaultHttpClient(); ClientConnectionManager mgr = client.getConnectionManager(); HttpParams params = client.getParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); // 請求超時 HttpConnectionParams.setSoTimeout(params, 15000); HttpConnectionParams.setTcpNoDelay(params, true);//nagle算法默認是打開的,會引起delay的問題;所以要手工關掉。 HttpConnectionParams.setConnectionTimeout(params, 15000); client = new DefaultHttpClient( new ThreadSafeClientConnManager(params, mgr.getSchemeRegistry()), params); return client; } }連nagle算法都關閉了,哎,其實這個nagle算法關不關閉都不會影響的。隨後也檢查了,每次的網絡請求都是線程控制的,甚至他都把其它不重要的網絡請求線程的優先級設置成Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND) 都沒效果。
android工程師,又重新寫了一個訪問server的app,順序執行100次,均很正常;這說明了webapp的業務邏輯調用出問題了。
最後發現:
webapp在webview加載完自己的登錄頁面就開始調用countly統計分析的初始化,結果造成了countly數據發送和webapp登錄請求並發,自然就會出現有時候耗時長的問題;
雖然這篇的文章標題和內容不太相符,但是我想提醒大家,做app一定合理安排好業務邏輯,充分適當地用好網絡請求這種寶貴而影響用戶體驗的資源。
隨後對於webapp的業務優化開展:
1、 全部的網絡請求放在登錄成功後延時10秒執行。
2、countly監控數據匯報和app升級下載放在,activity onstop 裡執行。
3、合並多個並發網絡請求為一次網絡請求,減少並發。
一個簡單的畫板,可以繪制,可以選擇顏色,可以保存。 當然了這種工具一般常用的通訊軟件都是會有的,比如QQ, 飛秋等其中我們必須監聽手指的觸摸事件,手指的觸摸事件就分為3種
華為、榮耀很多款機型都配備了指紋識別模塊,長期用指紋來解鎖,恐怕鎖屏密碼都忘記了吧?那麼要怎麼才能不用雙清、不用還原系統,不丟失任何數據的情況下修改鎖屏密碼
1.View 繪制流程ViewGroup也是繼承於View,下面看看繪制過程中依次會調用哪些函數。 說明:measure()和onMeasure()在View.Java源
有關HTC One X9手機的root教程還沒有給大家分享呢,接下來就來給大家說說有關這個手機的root教程了,這個root教程是利用卡刷的方式進行root