編輯:關於Android編程
應用做的匆忙,很多地方只顧實現功能,沒有兼顧好性能,所以停下來重構代碼優化性能,結果在打log看啟動時間的時候,發現
Application的onCreate執行了多次,這樣導致重復初始化資源,初始化了3次導致接近1s時間。
發現這個是由獨立進程引起的。即:process這個屬性。
android:process
一般情況下一個服務沒有自己獨立的進程,它一般是作為一個線程運行於它所在的應用的進程中。但是也有例外,Android聲明文件中的android:process屬性卻可以為任意組件包括應用指定進程,換句話說,通過在聲明文件中設置android:process屬性,我們可以讓組件(例如Activity, Service等)和應用(Application)創建並運行於我們指定的進程中。
如果我們需要讓一個服務在一個遠端進程中運行(而不是標准的它所在的apk的進程中運行),我們可以在聲明文件中這個服務的標簽中通過android:process屬性為其指定一個進程。
com.example.hello:baiduMap
(如果聲明文件中的組件或者應用沒有指定這個屬性則默認應用和其組件將相應運行在以其包名命名的進程中)
解決方法如下:
@Override public void onCreate() { super.onCreate(); mApplication = this; long s1 = System.currentTimeMillis(); String processName = OsUtils.getProcessName(this, android.os.Process.myPid()); L.d(WModel.Time, 進程名稱+processName); if (processName != null) { boolean defaultProcess = processName .equals(WMapConstants.REAL_PACKAGE_NAME); if (defaultProcess) { //必要的初始化資源操作 } } L.d(WModel.Time, onCreate耗時 + (System.currentTimeMillis() - s1)); }
/** * @return null may be returned if the specified process not found */ public static String getProcessName(Context cxt, int pid) { ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE); ListrunningApps = am.getRunningAppProcesses(); if (runningApps == null) { return null; } for (RunningAppProcessInfo procInfo : runningApps) { if (procInfo.pid == pid) { return procInfo.processName; } } return null; }
這樣一來只初始化一次,不會導致很長時間的浪費。
啥都不說先上效果圖把.. 這個是我項目裡的效果![這裡寫圖片描述] 下面的是我抽取出來的 demo 適配啥的我基本上都做好了沒做其他的
第一步:注冊開發者賬號,—->微信開放平台https://open.weixin.qq.com/第二步:創建一個應用,並通過審核(其中需要填寫項目中的D
在Android開發中,View是我們必須要接觸的用來展示的技術.通常情況下隨著View視圖的越來越復雜,整體布局的性能也會隨之下降.這裡介紹一個在某些場景下提升布局性能
在 Android 3.0 開始,App Bar的功能逐漸被加入到 ActionBar中,而這個 ActionBar 被包含在 Theme 中,不過對於開發者來說,缺乏的