
1,Android UI體系
1) 三層架構(gòu)、MVC、MVP、MVVM
對(duì)于小項(xiàng)目可以按如下分法(mvp選用);對(duì)于大項(xiàng)目可以按模塊分,然后模塊內(nèi)再按如下分發(fā)。
分包(按功能分):
basal:基類;
surface(fragment、activity、broadcast、listener):界面類;
adapter:適配器類;
mvp(presenter、constract、view):mvp層類;
util:通用工具類;
widget:自定義View類;
entity:實(shí)體類;
Config.class
MyApplication
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2)xml(Extensible Markup Language,可擴(kuò)展標(biāo)記語言)
字體一般是34px、30px、28px、26px、24px、22px
小細(xì)線1px dddddd 粗線10px f5f5f5 背景色f5f5f5、app的左右距離是20px
主題色
3)控件
①View
【Android學(xué)習(xí)】android.view.ViewStub
【android學(xué)習(xí)】EditText
【android學(xué)習(xí)】Toast(消息彈框)
【android學(xué)習(xí)】Dialog對(duì)話框
【android學(xué)習(xí)】webView(網(wǎng)絡(luò)視圖)
【Android學(xué)習(xí)】列表(ListView、RecyclerView)和adapter
【Android學(xué)習(xí)】android.view.ViewStub
【Android學(xué)習(xí)】Android常用框架
②標(biāo)題欄
4)Window和WindowManager
5)圖片
①Drawable
②Bitmap的加載和Cache
6)動(dòng)畫
7)Splash界面
①作用
展現(xiàn)產(chǎn)品的logo
初始化操作(創(chuàng)建數(shù)據(jù)庫(kù),讀取配置文件)
連接服務(wù)器檢查軟件授權(quán)
連接服務(wù)器檢查軟件的更新
②實(shí)現(xiàn)
用handler延遲,在SplashActivity界面中寫如下代碼 ,并禁用返回鍵。
private final int SPLASH_DISPLAY_LENGHT = 3000;
……
handler = new Handler();
// 延遲SPLASH_DISPLAY_LENGHT時(shí)間然后跳轉(zhuǎn)到MainActivity
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this,
MainActivity.class);
startActivity(intent);
SplashActivity.this.finish();
}
}, SPLASH_DISPLAY_LENGHT);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
2,Android基礎(chǔ)
1)四大組件-Activity
①Fragment相關(guān)
2)四大組件-Service
3)四大組件-Content Provider
4)四大組件-BroadcastReceiver(廣播接收者)
5)重要組件-intent
6)Context類和Application類
7)【Android學(xué)習(xí)】Android Studio學(xué)習(xí)
項(xiàng)目結(jié)構(gòu)
gradle
jar和arr
8)Android系統(tǒng)優(yōu)缺點(diǎn)
五大不足:
①安全與隱私
②首先開賣Android手機(jī)的不是最大運(yùn)營(yíng)商
③運(yùn)營(yíng)商仍然能影響到Android手機(jī)
④同類機(jī)型用戶減少:缺少統(tǒng)一機(jī)型的程序
⑤過分依賴開發(fā)商缺少標(biāo)準(zhǔn)配置:開發(fā)依賴第三方,缺少產(chǎn)品統(tǒng)一性。
優(yōu)點(diǎn):
①市場(chǎng)份額大
②應(yīng)用程序發(fā)展迅速
③智能廠家助力
④手機(jī)價(jià)廉但性能不低
⑤機(jī)型多,硬件配置優(yōu)
⑥系統(tǒng)開源:利于創(chuàng)新,開發(fā)者多,方便開發(fā)。
9)常用Manager
3,Android底層
1)存儲(chǔ)方式(數(shù)據(jù)持久化)
數(shù)據(jù)持久化:將內(nèi)存中的數(shù)據(jù)模型轉(zhuǎn)化為存儲(chǔ)模型。、
其他存儲(chǔ)方式:
redis:一個(gè)開源使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù)。
sessionStorage:生命周期為當(dāng)前窗口或標(biāo)簽頁,一旦窗口或標(biāo)簽頁被永久關(guān)閉了,那么所有通過sessionStorage存儲(chǔ)的數(shù)據(jù)也就被清空了。
file, sqlite3, Preferences, ContentResolver與ContentProvider前三種數(shù)據(jù)操作方式都只是針對(duì)本應(yīng)用內(nèi)數(shù)據(jù),程序不能通過這三種方法去操作別的應(yīng)用內(nèi)的數(shù)據(jù)。
①SQLite數(shù)據(jù)庫(kù)
存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。
②File(文件存儲(chǔ)、I/O存儲(chǔ))
常用語存儲(chǔ)大數(shù)量的數(shù)據(jù),但是缺點(diǎn)是更新數(shù)據(jù)將是一件困難的事情。
分為內(nèi)部存儲(chǔ)和外部存儲(chǔ)(SD卡)兩種存儲(chǔ)方式。
File.mkdirs和File.mkdir的區(qū)別
File.mkdirs在多層目錄底下創(chuàng)建文件。
File.mkdir能在二層目錄只能一層創(chuàng)建文件,僅能在已有目錄下創(chuàng)建. 對(duì)于路徑實(shí)際不存在的,調(diào)用File.mkdirs()方法。
③SharedPreferences
本質(zhì)就是一個(gè)xml文件,常用于存儲(chǔ)較簡(jiǎn)單的參數(shù)設(shè)置。
共享參數(shù),鍵值對(duì)形式存儲(chǔ)。
④網(wǎng)絡(luò)存儲(chǔ)
將數(shù)據(jù)存儲(chǔ)到服務(wù)器上。
⑤ContentProvider存儲(chǔ)
查看四大組件-Content Provider。
ContentProvider的目的是對(duì)外暴露數(shù)據(jù)供其他程序查詢。
每個(gè)Content Provider都會(huì)對(duì)外提供一個(gè)公共的URI(包裝成Uri對(duì)象),如果應(yīng)用程序有數(shù)據(jù)需要共享時(shí),就需要使用Content Provider為這些數(shù)據(jù)定義一個(gè)URI,然后其他的應(yīng)用程序就通過Content Provider傳入這個(gè)URI來對(duì)數(shù)據(jù)進(jìn)行操作。
2)【JAVA學(xué)習(xí)】Java內(nèi)存
3)【Android學(xué)習(xí)】DVM——apk生成、安裝、啟動(dòng)、反匯編
4)【Android學(xué)習(xí)】NDK編程——JNI(Java Native Interface,java本地接口)編程
5)【Android學(xué)習(xí)】Android安全機(jī)制
6)【Android學(xué)習(xí)】Android系統(tǒng)架構(gòu)
4,進(jìn)程和同步
1)【android 】進(jìn)程、守護(hù)進(jìn)程的實(shí)現(xiàn)及進(jìn)程拉活
2)【java學(xué)習(xí)】進(jìn)程、線程、程序
3)【Android學(xué)習(xí)】IPC(跨進(jìn)程通信,Inter-Process Communication)
4)【Android學(xué)習(xí)】Android網(wǎng)絡(luò):Socket、HTTP
①socket傳輸中,流的關(guān)閉
②android端通過socket接收到數(shù)據(jù)產(chǎn)生亂碼
③socket ECONNRESET 異常
④socket長(zhǎng)連接,造成數(shù)據(jù)粘包問題
⑤【Android學(xué)習(xí)】斷線重連、長(zhǎng)連接心跳機(jī)制
5)【Android學(xué)習(xí)】序列化:Serializable和Parcelable
6)【Android學(xué)習(xí)】消息機(jī)制Handler
7)【Android學(xué)習(xí)】線程的其他方式:AsyncTask、IntentService、HandlerThread、ThreadPoolExecutor
8)【java學(xué)習(xí)】多線程并發(fā)
9)【java學(xué)習(xí)】java鎖
10)資源池
Android中提供了資源池的對(duì)象有:
–Message
提供了消息池,有靜態(tài)方法Obtain從消息池中取對(duì)象。
–AsynTask
AsynTask是線程池改造的,池里 默認(rèn)提供(核數(shù)+1)個(gè)線程進(jìn)行并發(fā)操作,最大支持(核數(shù) * 2 + 1)個(gè)線程,超過后會(huì)丟棄其他任務(wù)。
–ThreadPool
Thread默認(rèn)不提供資源池,除非使用線程池ThreadPool管理。
對(duì)于Looper,每個(gè)Looper創(chuàng)建時(shí)創(chuàng)建一個(gè)消息隊(duì)列和線程對(duì)象,但不是資源池。
5,數(shù)據(jù)結(jié)構(gòu)和算法
【數(shù)據(jù)結(jié)構(gòu)】排序算法
【數(shù)據(jù)結(jié)構(gòu)】查找
【數(shù)據(jù)結(jié)構(gòu)】樹
【數(shù)據(jù)結(jié)構(gòu)】圖
【數(shù)據(jù)結(jié)構(gòu)】數(shù)組
【數(shù)據(jù)結(jié)構(gòu)】隊(duì)列和棧
【數(shù)據(jù)結(jié)構(gòu)】線性表:順序表、單鏈表
【算法】電梯調(diào)度算法/磁盤掃描算法
6,設(shè)計(jì)模式
編程素質(zhì)】多線程編程之設(shè)計(jì)模式
1.復(fù)合模式:三層架構(gòu)、MVC、MVP、MVVM
2.設(shè)計(jì)模式-單例模式
配置類的使用。
3.設(shè)計(jì)模式-模板方法
通過抽象類或接口提前定義要實(shí)現(xiàn)的方法。
4.設(shè)計(jì)模式-觀察者模式
消息的通知。
5.設(shè)計(jì)模式-裝飾模式:處于安全目的,保護(hù)被訪問者
對(duì)一個(gè)已有的接口進(jìn)行功能擴(kuò)展。
如,繼承父類,并增加擴(kuò)展新的方法。
6.設(shè)計(jì)模式-策略模式
MVC中:
控制器是視圖的策略。
視圖只關(guān)心系統(tǒng)中可視的部分,對(duì)于任何界面行為,都委托給控制器處理。
控制器負(fù)責(zé)和模型交互來傳遞用戶請(qǐng)求,對(duì)于工作是怎么完成的,視圖毫不知情。
7.設(shè)計(jì)模式-工廠模式(Factory Pattern)、 控制反轉(zhuǎn)(IoC)與依賴注入(DI)
簡(jiǎn)單工廠、工廠方法、抽象工廠。創(chuàng)建新對(duì)象。
8.設(shè)計(jì)模式-命令模式
支持撤銷。
9.設(shè)計(jì)模式-適配器模式(Adapter)
adpater的使用。
10.設(shè)計(jì)模式-外觀模式
如用一個(gè)spManager管理所有的sp對(duì)象獲得的數(shù)據(jù)。
11.設(shè)計(jì)模式-橋接模式
將抽象化(Abstraction)與實(shí)現(xiàn)化(Implementation)脫耦,使得二者可以獨(dú)立地變化。
舉例:汽車和公路問題。
12.設(shè)計(jì)模式-代理模式(委托模式、Proxy Pattern):動(dòng)態(tài)擴(kuò)充對(duì)象功能
傳入對(duì)象,并調(diào)用對(duì)應(yīng)的方法。如接口回調(diào)。
13.迭代器模式
Iterator。
14.組合模式(合成模式)
允許將對(duì)象組合成樹形結(jié)構(gòu)來表現(xiàn)“整體/部分”層次結(jié)構(gòu)。樹節(jié)點(diǎn)可以對(duì)子節(jié)點(diǎn)進(jìn)行增刪改查等操作。
View和ViewGroup就是一種很標(biāo)準(zhǔn)的組合模式。
15.狀態(tài)模式
機(jī)器取糖果,允許對(duì)象在內(nèi)部狀態(tài)改變時(shí)改變它的行為,對(duì)象看起來好像修改了它的類。
16.生成器模式Builder Pattern
如AlertDialog.Builder。
17.責(zé)任鏈模式
經(jīng)常被使用在窗口系統(tǒng)中,處理鼠標(biāo)和鍵盤之類的事件。
18.蠅量模式Flyweight Pattern
19.解釋器模式Interpreter Pattern
20.中介者模式Mediator Pattern
21.備忘錄模式MementoPattern
當(dāng)你需要讓對(duì)象返回之前的狀態(tài)時(shí)(例如:用戶請(qǐng)求撤銷操作),就使用備忘錄模式
22.原型模式Prototype Pattern
23.訪問者模式Visitor Pattern
7,網(wǎng)絡(luò)基礎(chǔ)、操作系統(tǒng)基礎(chǔ)
【網(wǎng)絡(luò)基礎(chǔ)】TCP/UDP
【數(shù)據(jù)結(jié)構(gòu)】位運(yùn)算
【網(wǎng)絡(luò)基礎(chǔ)】IP計(jì)算
8,數(shù)據(jù)庫(kù)
9,java基礎(chǔ)
【java學(xué)習(xí)】java基礎(chǔ)語法
【java學(xué)習(xí)】String字符串
【java學(xué)習(xí)】類Class
【java學(xué)習(xí)】集合框架
【java學(xué)習(xí)】JVM學(xué)習(xí)
【java學(xué)習(xí)】面向?qū)ο笕筇匦裕悍庋b,繼承,多態(tài)
【Android學(xué)習(xí)】緩存
【java學(xué)習(xí)】修飾符
【java學(xué)習(xí)】數(shù)據(jù)類型
【java學(xué)習(xí)】裝箱與拆箱、泛型
【java學(xué)習(xí)】異常
【java學(xué)習(xí)】反射機(jī)制
【java學(xué)習(xí)】java基礎(chǔ)語法
【java學(xué)習(xí)】正則表達(dá)式(Regular Expression)
【java學(xué)習(xí)】Json框架
【Java學(xué)習(xí)】JAVA和C++區(qū)別
10,Android性能優(yōu)化
1)布局優(yōu)化、自定義View優(yōu)化
刪除布局中無用的控件和層級(jí)
有選擇地使用性能較高的ViewGroup
用<include>標(biāo)簽、<merge>標(biāo)簽、ViewStub
2)activity啟動(dòng)優(yōu)化
耗時(shí)操作優(yōu)化
布局文件優(yōu)化
視圖加載優(yōu)化。如:Fragment的懶加載,只有顯示時(shí)才去加載。
3)列表優(yōu)化
盡量復(fù)用convertview歷史的緩存,減少創(chuàng)建新的view對(duì)象。
盡量的減少子孩子的id的查詢次數(shù),定義一個(gè)viewHolder。
4)內(nèi)存優(yōu)化
5)圖片緩存
圖片的三級(jí)緩存機(jī)制
11,項(xiàng)目管理
項(xiàng)目管理-Git使用
項(xiàng)目管理-SVN學(xué)習(xí)
12,應(yīng)用
1)token登錄
①定義
Token是服務(wù)端生成的一串字符串,以作客戶端進(jìn)行請(qǐng)求的一個(gè)令牌,當(dāng)?shù)谝淮蔚卿浐螅?wù)器生成一個(gè)Token便將此Token返回給客戶端,以后客戶端只需帶上這個(gè)Token前來請(qǐng)求數(shù)據(jù)即可,無需再次帶上用戶名和密碼。
②作用
Token的目的是為了驗(yàn)證用戶登錄情況以及減輕服務(wù)器的壓力,減少頻繁的查詢數(shù)據(jù)庫(kù),使服務(wù)器更加健壯。
Token是在客戶端頻繁向服務(wù)端請(qǐng)求數(shù)據(jù),服務(wù)端頻繁的去數(shù)據(jù)庫(kù)查詢用戶名和密碼并進(jìn)行對(duì)比,判斷用戶名和密碼正確與否,這樣增加了服務(wù)器負(fù)擔(dān)。
③應(yīng)用
i>用戶首次登錄成功之后, 服務(wù)器端就會(huì)生成一個(gè) token 值,保存在數(shù)據(jù)庫(kù)并返回給客戶端.
ii>客戶端拿到 token 值之后,使用sp進(jìn)行保存。
iii>客戶端再次發(fā)送網(wǎng)絡(luò)請(qǐng)求(一般不是登錄請(qǐng)求)的時(shí)候,就會(huì)將這個(gè) token 值附帶到參數(shù)中發(fā)送給服務(wù)器.
iv>服務(wù)器接收到客戶端的請(qǐng)求之后,取出token值與保存在本地(數(shù)據(jù)庫(kù))中的token值做對(duì)比
如果兩個(gè) token 值相同, 說明用戶處于登錄狀態(tài)。
如果沒有這個(gè) token 值, 沒有登錄成功。
如果 token 值不同: 說明原來的登錄信息已經(jīng)失效,讓用戶重新登錄。
2)登錄驗(yàn)證
通過.requestFocus()獲得焦點(diǎn),提高用戶體驗(yàn)
String Str_name = et_username.getText().toString().trim();
String Str_psw = et_password.getText().toString().trim();
if (null != Str_name && Str_name.equals("")) {
showCustomToast("用戶名不能為空");
et_username.requestFocus();
} else if (null != Str_psw && Str_psw.equals("")) {
showCustomToast("密碼不能為空");
et_password.requestFocus();
} else if (Str_psw.contains("卍")) {
showCustomToast("密碼不能含有特殊字符");
et_password.requestFocus();
} else if (Str_psw.length() < 6) {
showCustomToast("密碼不能少于6位");
et_password.requestFocus();
} else {
tryLogin(Str_name, Str_psw);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
3)GPS開啟
檢測(cè)GPS是否開啟,如果沒有則跳到GPS界面供用戶開啟。
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 判斷GPS是否正常啟動(dòng)
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
ToastUtil.showShort(context, "未開啟位置服務(wù),請(qǐng)開啟GPS導(dǎo)航");
// 返回開啟GPS導(dǎo)航設(shè)置界面
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 0);
return;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
4)其他demo
android離線日志文件打印
檢測(cè)android主屏,并把a(bǔ)pp從后臺(tái)切換置前臺(tái)
保持屏幕常亮
斷線重連機(jī)制
13,問題解決
1)eclipse找不到設(shè)備,adb需要重啟
寫一個(gè).bat文件,內(nèi)容如下:
(注意:cd /d D:android-sdksplatform-tools 請(qǐng)?zhí)鎿Q為自己的adb.exe路徑)
@echo off
taskkill /F /IM adb.exe
echo Kill完成...
pause
echo 重啟開始...
cd /d D:android-sdksplatform-tools
adb devices
pause. & exit
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2)其它
①android中使用Menu時(shí)可能需要重寫的方法有:onCreateOptionMenu()和onOptionItemSelected().
②eclipse編輯器亂碼解決
configChanges詳解-之解決問題:手機(jī)切換字體后,app異常崩潰
eclipse創(chuàng)建app時(shí)多出appcompat_v7
android開發(fā)誤刪appcompat_v7
Replace “…” with ellipsis character (…, &&;#8230;) ?
eclipse ‘Launching Hello’has encountered a problem