android 启动service报错,Android小经验
轉(zhuǎn)載自:http://mp.weixin.qq.com/s?__biz=MzA4MjU5NTY0NA==&mid=404388098&idx=1&sn=8bbbba7692dca68cdda2212dec4d86c0&scene=21#wechat_redirect
今天是馮建同學(xué)投稿,總結(jié)他在Android開(kāi)發(fā)方面的各種小經(jīng)驗(yàn),我覺(jué)得非常有意義,所謂經(jīng)驗(yàn)豐富有時(shí)候是指積累的這些小經(jīng)驗(yàn)非常多,他這篇分享相信會(huì)幫助到一些朋友。我也曾推薦過(guò)他的?APK魔鬼瘦身
一文,沒(méi)看過(guò)的朋友也可以再去看看。
做Android久了,就會(huì)踩很多坑,被坑得多了就有經(jīng)驗(yàn)了,閑暇之余整理了部分,現(xiàn)挑選一些重要或者偏門(mén)的“小”經(jīng)驗(yàn)做個(gè)記錄。
查看SQLite日志
因?yàn)閷?shí)現(xiàn)里用了Log.isLoggable(TAG, Log.VERBOSE)做了判斷,在LessCode的LogLess中也參考了這種機(jī)制:https://github.com/openproject/LessCode/blob/master/lesscode-core/src/main/java/com/jayfeng/lesscode/core/LogLess.java
使用這種方法就可以在Release版本也能做到查看應(yīng)用的打印日志了。
PNG優(yōu)化
APK打包會(huì)自動(dòng)對(duì)PNG進(jìn)行無(wú)損壓縮,如果自行無(wú)損壓縮是無(wú)效的。
當(dāng)然進(jìn)行有損壓縮是可以的:https://tinypng.com/
Tcpdump抓包
有些模擬器比如genymotion自帶了tcpdump,如果沒(méi)有的話(huà),需要下載tcpdump:
http://www.strazzere.com/android/tcpdump
把tcpdump push到/data/local下,抓包命令:
查看簽名
很多開(kāi)發(fā)者服務(wù)都需要綁定簽名信息,用下面的命令可以查看簽名:
注意,這個(gè)是需要密碼的,可以查看MD5, SHA1,SHA256等等。
單例模式(懶漢式)的最佳寫(xiě)法
特別說(shuō)到這個(gè)問(wèn)題,是因?yàn)榫W(wǎng)上很多這樣的代碼:
這種寫(xiě)法線(xiàn)程不安全,改進(jìn)一下,加一個(gè)同步鎖:
網(wǎng)上這樣的代碼更多,可以很好的工作,但是缺點(diǎn)是效率低。
實(shí)際上,早在JDK1.5就引入volatile關(guān)鍵字,所以又有了一種更好的雙重校驗(yàn)鎖寫(xiě)法:
這才是最佳寫(xiě)法!!!
不是說(shuō)第二種寫(xiě)法有問(wèn)題,或者在Android中一定要用第三種寫(xiě)法,只是告訴大家一種更好的寫(xiě)法。
多進(jìn)程Application
是不是經(jīng)常發(fā)現(xiàn)Application里的方法執(zhí)行了多次?百思不得其解。
因?yàn)楫?dāng)有多個(gè)進(jìn)程的時(shí)候,Application會(huì)執(zhí)行多次,可以通過(guò)pid來(lái)判斷那些方法只執(zhí)行一次,避免浪費(fèi)資源。
隱式啟動(dòng)Service
這是Android5.0的一個(gè)改動(dòng),不支持隱式的Service調(diào)用。下面的代碼在Android 5.0+上會(huì)報(bào)錯(cuò):Service Intent must be explicit:
可改成如下:
fill_parent的壽命
在Android2.2之后,支持使用match_parent。你的布局文件里是不是既有fill_parent和match_parent顯得很亂?
如果你現(xiàn)在的minSdkVersion是8+的話(huà),就可以忽略fill_parent,統(tǒng)一使用match_parent了,否則請(qǐng)使用fill_parent。
ListView的局部刷新
有的列表可能notifyDataSetChanged()代價(jià)有點(diǎn)高,最好能局部刷新。
局部刷新的重點(diǎn)是,找到要更新的那項(xiàng)的View,然后再根據(jù)業(yè)務(wù)邏輯更新數(shù)據(jù)即可。
強(qiáng)調(diào)一下,最后那個(gè)列表數(shù)據(jù)別忘記更新, 不然數(shù)據(jù)源不變,一滾動(dòng)可能又還原了。
系統(tǒng)日志中幾個(gè)重要的TAG
一行居中,多行居左的TextView
這個(gè)一般用于提示信息對(duì)話(huà)框,如果文字是一行就居中,多行就居左。
在TextView外套一層wrap_content的ViewGroup即可簡(jiǎn)單實(shí)現(xiàn):
setCompoundDrawablesWithIntrinsicBounds()
網(wǎng)上一大堆setCompoundDrawables()方法無(wú)效不顯示的問(wèn)題,然后解決方法是setBounds,需要計(jì)算大小…
不用這么麻煩,用setCompoundDrawablesWithIntrinsicBounds()這個(gè)方法最簡(jiǎn)單!
計(jì)算程序運(yùn)行時(shí)間
為了計(jì)算一段代碼運(yùn)行時(shí)間,一般的做法是,在代碼的前面加個(gè)startTime,在代碼的后面把當(dāng)前時(shí)間減去startTime,這個(gè)時(shí)間差就是運(yùn)行時(shí)間。
這里提供一種寫(xiě)起來(lái)更方便的方法,完全無(wú)時(shí)間邏輯,只是加一個(gè)打印log就夠了。
沒(méi)有計(jì)算時(shí)間的邏輯,這能測(cè)出來(lái)?
把日志過(guò)濾出來(lái),運(yùn)行命令“adb logcat -v time | grep TAG”:
通過(guò)-v time參數(shù),可以比較日志左邊的時(shí)間來(lái)算出中間的代碼運(yùn)行的時(shí)間。
Java引用類(lèi)型一覽表
Context使用場(chǎng)景
為了防止Activity,Service等這樣的Context泄漏于一些生命周期更長(zhǎng)的對(duì)象,可以使用生命周期更長(zhǎng)的ApplicationContext,但是不是所有的Context的都能替換為ApplicationContext
這是網(wǎng)上流傳的一份表格:
圖片緩存大小
現(xiàn)在很多圖片庫(kù)需要給圖片設(shè)置一個(gè)最大緩存,但是這個(gè)值設(shè)置多少合適呢?
高端機(jī)和低端機(jī)的配置顯然應(yīng)該不同,可以考慮設(shè)置一個(gè)動(dòng)態(tài)值。
建議設(shè)置為應(yīng)用可用內(nèi)存的1/8:
系統(tǒng)內(nèi)置的一些工具類(lèi)
在AOSP源碼全局搜了一下包含Util關(guān)鍵字的類(lèi),整理出這個(gè)列表供大家參考:
這么多工具類(lèi),一定可以找到對(duì)你有用的。
ClipPadding
這個(gè)不多說(shuō),ListView的ClipPadding設(shè)為false,就能為L(zhǎng)istView設(shè)置各種padding而不會(huì)出現(xiàn)丑陋的滑動(dòng)“禁區(qū)”了。
強(qiáng)大的dumpsys
dumpsys可以查看系統(tǒng)服務(wù)和狀態(tài),非常強(qiáng)大,可通過(guò)如下查看所有支持的子命令:
這里列舉幾個(gè)稍微常用的:
bugreport命令
很多人都用過(guò)adb logcat,但是如果想要更詳細(xì)的信息,logcat則無(wú)能為力。
所以大多數(shù)手機(jī)廠商測(cè)試更多的是用adb bugreport來(lái)抓log給開(kāi)發(fā)人員分析。
dpi文件夾的換算比例
更新媒體庫(kù)文件
以前做ROM的時(shí)候經(jīng)常碰到一些第三方軟件(某音樂(lè)APP)下載了新文件或刪除文件之后,但是媒體庫(kù)并沒(méi)有更新,因?yàn)檫@個(gè)是需要第三方軟件主動(dòng)觸發(fā)。
媒體庫(kù)會(huì)在手機(jī)啟動(dòng),SD卡插拔的情況下進(jìn)行全盤(pán)掃描,不是實(shí)時(shí)的而且代價(jià)比較大,所以單個(gè)文件的刷新很有必要。
Monkey參數(shù)
大家都知道,跑monkey的參數(shù)設(shè)置有一些要注意的地方,比如太快了不行不切實(shí)際,太慢了也不行等等,這里給出一個(gè)參考:
一邊跑monkey,一遍抓log吧。
小結(jié)
無(wú)論是大經(jīng)驗(yàn)還是小經(jīng)驗(yàn),都是好經(jīng)驗(yàn),關(guān)鍵時(shí)候出奇效。
原文:http://blog.csdn.net/zhouli_csdn/article/details/50978336
總結(jié)
以上是生活随笔為你收集整理的android 启动service报错,Android小经验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小米净化器显示多少为正常(小米官方售后服
- 下一篇: qq飞车手游安卓苹果互通吗(PC版官方网