以下內(nèi)容是針對(duì) 納蘭寒明 發(fā)布 《android 小知識(shí) 1》 和 《android 小知識(shí) 2》文章做了更改,內(nèi)容會(huì)不斷補(bǔ)充更新,也歡迎你的留言補(bǔ)充佛致。
1.FragmentActivity與Activity的區(qū)別
FragmentActivity
繼承自 Activity贮缕,是去解決 Android3.0
之前沒(méi)有fragment
的 api 的問(wèn)題,在3.0后俺榆,其與 Activity
的功能是一樣的感昼。
FragmentActivity 的使用
在android3.0之前:getSupportFragmentManager()
在android3.0之后:getFragmentManager()
2.MediaType的使用
Internet Media Type
,互聯(lián)網(wǎng)媒體類型,也叫 MIME 類型罐脊,在 Http協(xié)議消息頭中定嗓,使用 Content-Type 來(lái)表示具體請(qǐng)求中的媒體類型信息,使用兩部分的標(biāo)識(shí)符來(lái)確定一個(gè)類型
例如:
application/json:json
格式
application/xxx:xxx格式
3.Pattern和Matcher
兩個(gè)均屬于java中正則表達(dá)式類萍桌,
4.@suppressLint(“NewApi”)的意義
該代碼經(jīng)常出現(xiàn)在類之前蜕乡,其存在的目地是屏蔽Android lint
錯(cuò)誤,在使用當(dāng)前的 Android版本中高于android:minSdkVersion
時(shí)使用梗夸,避免編譯器警告。
5. 3DES和Base64的說(shuō)明
3DES是三重DES加密号醉,對(duì)于DES來(lái)說(shuō)反症,當(dāng)前科技可以暴力破解,而3DES是將其進(jìn)行三重DES加密畔派,這樣可以延長(zhǎng)暴力破解的時(shí)間.
Base64是用于傳輸8bit字節(jié)代碼的編碼方式之一铅碍。
6.linux中文件系統(tǒng)
- 第一個(gè)字符表示文件類型:
'd',目錄
'l'线椰,軟鏈接
'b'胞谈,塊設(shè)備
'c',字符設(shè)備
's'憨愉,socket
'p'烦绳,管道
'-',普通文件
- 最后一個(gè)字符:
'r'配紫,表示允許讀權(quán)限
'w'径密,表示允許寫權(quán)限
'x',表示允許執(zhí)行權(quán)限
7.Butterknife框架
view 注入框架躺孝,減少大量的 findViewById
及 setOnClickListener
享扔,可視化一鍵生成
8.res和asset區(qū)分
res下為可編譯的資源文件
assets下為原生資源文件,不會(huì)被R.文件編譯植袍,加載這些原生資源惧眠,需要調(diào)用其方法。
9.WebView屬性信息:
webView.getSettings().setSupportZoom(false);//設(shè)置WebView是否支持使用屏幕控件或手勢(shì)進(jìn)行縮放于个,默認(rèn)是true氛魁,支持縮放。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {//判斷版本大于17
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);//設(shè)置WebView是否通過(guò)手勢(shì)觸發(fā)播放媒體,默認(rèn)是true呆盖,需要手勢(shì)觸發(fā)拖云。
}
webView.getSettings().setBuiltInZoomControls(true);//設(shè)置WebView是否使用其內(nèi)置的變焦機(jī)制,該機(jī)制集合屏幕縮放控件使用应又,默認(rèn)是false宙项,不使用內(nèi)置變焦機(jī)制。
webView.getSettings().setDisplayZoomControls(false);//設(shè)置WebView使用內(nèi)置縮放機(jī)制時(shí)株扛,是否展現(xiàn)在屏幕縮放控件上尤筐,默認(rèn)true,展現(xiàn)在控件上洞就。
webView.getSettings().setAllowFileAccess(false);//設(shè)置在WebView內(nèi)部是否允許訪問(wèn)文件盆繁,默認(rèn)允許訪問(wèn)。
webView.getSettings().setAllowContentAccess(true);//設(shè)置WebView是否使用其內(nèi)置的變焦機(jī)制旬蟋,該機(jī)制結(jié)合屏幕縮放控件使用油昂,默認(rèn)是false,不使用內(nèi)置變焦機(jī)制倾贰。
webView.getSettings().setLoadWithOverviewMode(false);//設(shè)置WebView是否使用預(yù)覽模式加載界面冕碟。
webView.getSettings().setSaveFormData(false);//設(shè)置WebView是否保存表單數(shù)據(jù),默認(rèn)true匆浙,保存數(shù)據(jù)安寺。
webView.getSettings().setTextZoom(100);//設(shè)置WebView是否保存表單數(shù)據(jù),默認(rèn)true首尼,保存數(shù)據(jù)挑庶。
webView.getSettings().setUseWideViewPort(false);//設(shè)置WebView是否使用viewport,當(dāng)該屬性被設(shè)置為false時(shí)软能,加載頁(yè)面的寬度總是適應(yīng)WebView控件寬度迎捺;當(dāng)被設(shè)置為true,當(dāng)前頁(yè)面包含viewport屬性標(biāo)簽查排,在標(biāo)簽中指定寬度值生效破加,如果頁(yè)面不包含viewport標(biāo)簽,無(wú)法提供一個(gè)寬度值雹嗦,這個(gè)時(shí)候該方法將被使用范舀。
webView.getSettings().setSupportMultipleWindows(true);//設(shè)置WebView是否支持多屏窗口,參考WebChromeClient#onCreateWindow了罪,默認(rèn)false锭环,不支持。
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm l);//設(shè)置WebView底層的布局算法泊藕,參考LayoutAlgorithm#NARROW_COLUMNS辅辩,將會(huì)重新生成WebView布局
webView.getSettings().setStandardFontFamily("sans-serif");//設(shè)置WebView標(biāo)準(zhǔn)字體庫(kù)字體,默認(rèn)字體“sans-serif”。
更多 webview
屬性信息訪問(wèn)http://teachcourse.cn/android-webview-websettings
另外玫锋,webview
中存在js的彈窗顯示蛾茉,需要手動(dòng)添加,webview
并不能處理js的彈窗撩鹿,http://blog.csdn.net/mchenys/article/details/49930739
10.獲取手機(jī)信息:
//獲取手機(jī)信息
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();
String mtype = Build.MODEL;//手機(jī)型號(hào)
String mrelease = Build.VERSION.RELEASE;//系統(tǒng)版本號(hào)
String phone_company = Build.BRAND;//手機(jī)廠商
詳見(jiàn):http://blog.csdn.net/hytfly/article/details/8552483
11.TextSwitcher:
設(shè)置文本滾動(dòng)谦炬,交換textview文本信息的
12. Apk打包:
1)Android 系統(tǒng)要求所有的app文件在 android 手機(jī)上都需要打包,所以系統(tǒng)默認(rèn)自動(dòng)給應(yīng)用程序簽名节沦,ADT 會(huì)自動(dòng)使用 debug 密鑰為應(yīng)用程序簽 名键思,debug 密鑰是一個(gè)名為debug.keystore
的文件,位置位于電腦的:
/kang/.Android/debug.keystore甫贯,其中的kang是電腦的用戶名吼鳞。
2)在使用百度地圖中需要apk的簽名中的SHA1序列,可以找到debug.keystore的位置叫搁,使用dos命令輸入:
keytool -v -list -keystore debug.keystore
密碼默認(rèn)為android赔桌,即可獲取debug簽名的SHA1序列,但是記得要在百度地圖中添加開(kāi)發(fā)版本的簽名的SHA1的序列渴逻,如果簽名不同疾党,記得在百度地圖控制臺(tái)更換SHA1的序列,保證app正常使用裸卫。
3)在打包中keytool
生成的mykey.keystore
包括公鑰、私鑰和證書(shū)纽竣。
make_key通過(guò)調(diào)用openssh生成公鑰和私鑰墓贿,所以生成.x509.pem和.pk8的密鑰對(duì)。當(dāng)你獲取到.x509.pem和.pk8的密鑰對(duì)時(shí)蜓氨,查看此網(wǎng)頁(yè)就可以獲取到SHA1序列聋袋。http://blog.csdn.net/s_targaze_r/article/details/50739802
13.EditText.addTextChanged:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//輸入前
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//輸入中
}
@Override
public void afterTextChanged(Editable editable) {
//輸入后
}
});
14.url中的&
在與服務(wù)端進(jìn)行數(shù)據(jù)交互的過(guò)程中,通常會(huì)使用到url穴吹,這里面存在一個(gè)url中&符號(hào)的問(wèn)題幽勒。在url中會(huì)經(jīng)常出現(xiàn)url轉(zhuǎn)義出錯(cuò)的問(wèn)題,&為&所以在傳輸過(guò)程中最好將url轉(zhuǎn)義正確傳輸港令,在服務(wù)端也要正確接收啥容。
String url_encode = "";
try {
url_encode = URLEncoder.encode(url,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
這里url_encode就是處理過(guò)的url保證傳輸不出錯(cuò)。
15.webview網(wǎng)頁(yè)鏈接喚醒a(bǔ)pp
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.baidu.com"
android:scheme="http" />
<data
android:host="www.baidu.com"
android:scheme="kang" />
</intent-filter>
網(wǎng)頁(yè)喚醒a(bǔ)pp不止要在app中的Mainfest里面進(jìn)行更改顷霹,還要在網(wǎng)頁(yè)鏈接中進(jìn)行更改咪惠,app只負(fù)責(zé)接收對(duì)應(yīng)的<data/>數(shù)據(jù)就可以喚醒,在目前版本淋淀,我試驗(yàn)了自定義的scheme為kang遥昧,kang://www.baidu.com就可以實(shí)現(xiàn)app的喚醒,而http://www.baidu.com使用的7.1.0版本無(wú)法實(shí)現(xiàn),但是4.4.4版本網(wǎng)頁(yè)打開(kāi)就可以實(shí)現(xiàn)炭臭,這個(gè)可能和android的版本有關(guān)永脓。
另外:微信中屏蔽了scheme跳轉(zhuǎn),所以一搬都是用手機(jī)游覽器打開(kāi)才能喚起app鞋仍,另外一些手機(jī)游覽器也無(wú)法做到常摧。
16.熱更新和冷更新
熱更新:所謂熱更新就是指代碼可以不通過(guò)重新打包提交AppStore的方式來(lái)更新客戶端的執(zhí)行代碼。
冷更新:則與熱更新相反凿试,必須通過(guò)AppStore審核才可以更新客戶端版本排宰。
目前:ios是禁止熱更新的,可能是為了安全性的考慮那婉,為用戶營(yíng)造一個(gè)良好的使用環(huán)境板甘。
Android 可以考慮使用微信 Tinker 、 阿里 Sophix详炬。
17.isTaskRoot()
判斷本 Activity 是否在棧底盐类,或者是否是第一個(gè) Activity。
18.App安裝沖突
文件包與具有統(tǒng)一名稱的現(xiàn)有文件包存在沖突:
- ID相同呛谜,但簽名不同的應(yīng)用
- 手機(jī)上裝過(guò)其他版本的該應(yīng)用
19.防止 Apk 被反編譯
Android studio混淆代碼:
在build.gradle中設(shè)置 minifyEnabled true在跳,就會(huì)激活apk的代碼保護(hù)功能,反編譯后難以查看代碼