android知識點總結
1,Android UI體系
1) 三層架構、MVC、MVP、MVVM
對於小專案可以按如下分法(mvp選用);對於大專案可以按模組分,然後模組內再按如下分發。
分包(按功能分):
basal:基類;
surface(fragment、activity、broadcast、listener):介面類;
adapter:介面卡類;
mvp(presenter、constract、view):mvp層類;
util:通用工具類;
widget:自定義View類;
entity:實體類;
Config.class
MyApplication
1
2
3
4
5
6
7
8
9
2)xml(Extensible Markup Language,可擴充套件標記語言)
字型一般是34px、30px、28px、26px、24px、22px
小細線1px dddddd 粗線10px f5f5f5 背景色f5f5f5、app的左右距離是20px
主題色
3)控制元件
①View
【Android學習】android.view.ViewStub
【android學習】EditText
【android學習】Toast(訊息彈框)
【android學習】Dialog對話方塊
【android學習】webView(網路檢視)
【Android學習】列表(ListView、RecyclerView)和adapter
【Android學習】android.view.ViewStub
【Android學習】Android常用框架
②標題欄
4)Window和WindowManager
5)圖片
①Drawable
②Bitmap的載入和Cache
6)動畫
7)Splash介面
①作用
展現產品的logo
初始化操作(建立資料庫,讀取配置檔案)
連線伺服器檢查軟體授權
連線伺服器檢查軟體的更新
②實現
用handler延遲,在SplashActivity介面中寫如下程式碼 ,並禁用返回鍵。
private final int SPLASH_DISPLAY_LENGHT = 3000;
……
handler = new Handler();
// 延遲SPLASH_DISPLAY_LENGHT時間然後跳轉到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
1)四大元件-Activity
①Fragment相關
2)四大元件-Service
3)四大元件-Content Provider
4)四大元件-BroadcastReceiver(廣播接收者)
5)重要元件-intent
6)Context類和Application類
7)【Android學習】Android Studio學習
專案結構
gradle
jar和arr
8)Android系統優缺點
五大不足:
①安全與隱私
②首先開賣Android手機的不是最大運營商
③運營商仍然能影響到Android手機
④同類機型使用者減少:缺少統一機型的程式
⑤過分依賴開發商缺少標準配置:開發依賴第三方,缺少產品統一性。
優點:
①市場份額大
②應用程式發展迅速
③智慧廠家助力
④手機價廉但效能不低
⑤機型多,硬體配置優
⑥系統開源:利於創新,開發者多,方便開發。
9)常用Manager
1)儲存方式(資料持久化)
資料持久化:將記憶體中的資料模型轉化為儲存模型。、
其他儲存方式:
redis:一個開源使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫。
sessionStorage:生命週期為當前視窗或標籤頁,一旦視窗或標籤頁被永久關閉了,那麼所有通過sessionStorage儲存的資料也就被清空了。
file, sqlite3, Preferences, ContentResolver與ContentProvider前三種資料操作方式都只是針對本應用內資料,程式不能通過這三種方法去操作別的應用內的資料。
①SQLite資料庫
儲存結構化資料。
②File(檔案儲存、I/O儲存)
常用語儲存大數量的資料,但是缺點是更新資料將是一件困難的事情。
分為內部儲存和外部儲存(SD卡)兩種儲存方式。
File.mkdirs和File.mkdir的區別
File.mkdirs在多層目錄底下建立檔案。
File.mkdir能在二層目錄只能一層建立檔案,僅能在已有目錄下建立. 對於路徑實際不存在的,呼叫File.mkdirs()方法。
③SharedPreferences
本質就是一個xml檔案,常用於儲存較簡單的引數設定。
共享引數,鍵值對形式儲存。
④網路儲存
將資料儲存到伺服器上。
⑤ContentProvider儲存
檢視四大元件-Content Provider。
ContentProvider的目的是對外暴露資料供其他程式查詢。
每個Content Provider都會對外提供一個公共的URI(包裝成Uri物件),如果應用程式有資料需要共享時,就需要使用Content Provider為這些資料定義一個URI,然後其他的應用程式就通過Content Provider傳入這個URI來對資料進行操作。
2)【Java學習】Java記憶體
3)【Android學習】DVM——apk生成、安裝、啟動、反彙編
4)【Android學習】NDK程式設計——JNI(Java Native Interface,java本地介面)程式設計
5)【Android學習】Android安全機制
6)【Android學習】Android系統架構
1)【android 】程序、守護程序的實現及程序拉活
2)【java學習】程序、執行緒、程式
3)【Android學習】IPC(跨程序通訊,Inter-Process Communication)
4)【Android學習】Android網路:Socket、HTTP
①socket傳輸中,流的關閉
②android端通過socket接收到資料產生亂碼
③socket ECONNRESET 異常
④socket長連線,造成資料粘包問題
⑤【Android學習】斷線重連、長連線心跳機制
5)【Android學習】序列化:Serializable和Parcelable
6)【Android學習】訊息機制Handler
7)【Android學習】執行緒的其他方式:AsyncTask、IntentService、HandlerThread、ThreadPoolExecutor
8)【java學習】多執行緒併發
9)【java學習】java鎖
10)資源池
Android中提供了資源池的物件有:
–Message
提供了訊息池,有靜態方法Obtain從訊息池中取物件。
–AsynTask
AsynTask是執行緒池改造的,池裡 預設提供(核數+1)個執行緒進行併發操作,最大支援(核數 * 2 + 1)個執行緒,超過後會丟棄其他任務。
–ThreadPool
Thread預設不提供資源池,除非使用執行緒池ThreadPool管理。
對於Looper,每個Looper建立時建立一個訊息佇列和執行緒物件,但不是資源池。
【資料結構】排序演算法
【資料結構】查詢
【資料結構】樹
【資料結構】圖
【資料結構】陣列
【資料結構】佇列和棧
【資料結構】線性表:順序表、單鏈表
【演算法】電梯排程演算法/磁碟掃描演算法
程式設計素質】多執行緒程式設計之設計模式
1.複合模式:三層架構、MVC、MVP、MVVM
2.設計模式-單例模式
配置類的使用。
3.設計模式-模板方法
通過抽象類或介面提前定義要實現的方法。
4.設計模式-觀察者模式
訊息的通知。
5.設計模式-裝飾模式:處於安全目的,保護被訪問者
對一個已有的介面進行功能擴充套件。
如,繼承父類,並增加擴充套件新的方法。
6.設計模式-策略模式
MVC中:
控制器是檢視的策略。
檢視只關心繫統中可視的部分,對於任何介面行為,都委託給控制器處理。
控制器負責和模型互動來傳遞使用者請求,對於工作是怎麼完成的,檢視毫不知情。
7.設計模式-工廠模式(Factory Pattern)、 控制反轉(IoC)與依賴注入(DI)
簡單工廠、工廠方法、抽象工廠。建立新物件。
8.設計模式-命令模式
支援撤銷。
9.設計模式-介面卡模式(Adapter)
adpater的使用。
10.設計模式-外觀模式
如用一個spManager管理所有的sp物件獲得的資料。
11.設計模式-橋接模式
將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化。
舉例:汽車和公路問題。
12.設計模式-代理模式(委託模式、Proxy Pattern):動態擴充物件功能
傳入物件,並呼叫對應的方法。如介面回撥。
13.迭代器模式
Iterator。
14.組合模式(合成模式)
允許將物件組合成樹形結構來表現“整體/部分”層次結構。樹節點可以對子節點進行增刪改查等操作。
View和ViewGroup就是一種很標準的組合模式。
15.狀態模式
機器取糖果,允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。
16.生成器模式Builder Pattern
如AlertDialog.Builder。
17.責任鏈模式
經常被使用在視窗系統中,處理滑鼠和鍵盤之類的事件。
18.蠅量模式Flyweight Pattern
19.直譯器模式Interpreter Pattern
20.中介者模式Mediator Pattern
21.備忘錄模式MementoPattern
當你需要讓物件返回之前的狀態時(例如:使用者請求撤銷操作),就使用備忘錄模式
23.訪問者模式Visitor Pattern
7,網路基礎、作業系統基礎
【網路基礎】TCP/UDP
【資料結構】位運算
【網路基礎】IP計算
【java學習】java基礎語法
【java學習】String字串
【java學習】類Class
【java學習】集合框架
【java學習】JVM學習
【java學習】面向物件三大特性:封裝,繼承,多型
【Android學習】快取
【java學習】修飾符
【java學習】資料型別
【java學習】裝箱與拆箱、泛型
【java學習】異常
【java學習】反射機制
【java學習】java基礎語法
【java學習】正則表示式(Regular Expression)
【java學習】Json框架
【Java學習】JAVA和C++區別
1)佈局優化、自定義View優化
刪除佈局中無用的控制元件和層級
有選擇地使用效能較高的ViewGroup
用<include>標籤、<merge>標籤、ViewStub
2)activity啟動優化
耗時操作優化
佈局檔案優化
檢視載入優化。如:Fragment的懶載入,只有顯示時才去載入。
3)列表優化
儘量複用convertview歷史的快取,減少建立新的view物件。
儘量的減少子孩子的id的查詢次數,定義一個viewHolder。
4)記憶體優化
5)圖片快取
圖片的三級快取機制
專案管理-Git使用
專案管理-SVN學習
1)token登入
①定義
Token是服務端生成的一串字串,以作客戶端進行請求的一個令牌,當第一次登入後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求資料即可,無需再次帶上使用者名稱和密碼。
②作用
Token的目的是為了驗證使用者登入情況以及減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。
Token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,這樣增加了伺服器負擔。
③應用
i>使用者首次登入成功之後, 伺服器端就會生成一個 token 值,儲存在資料庫並返回給客戶端.
ii>客戶端拿到 token 值之後,使用sp進行儲存。
iii>客戶端再次傳送網路請求(一般不是登入請求)的時候,就會將這個 token 值附帶到引數中傳送給伺服器.
iv>伺服器接收到客戶端的請求之後,取出token值與儲存在本地(資料庫)中的token值做對比
如果兩個 token 值相同, 說明使用者處於登入狀態。
如果沒有這個 token 值, 沒有登入成功。
如果 token 值不同: 說明原來的登入資訊已經失效,讓使用者重新登入。
2)登入驗證
通過.requestFocus()獲得焦點,提高使用者體驗
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開啟
檢測GPS是否開啟,如果沒有則跳到GPS介面供使用者開啟。
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 判斷GPS是否正常啟動
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
ToastUtil.showShort(context, "未開啟位置服務,請開啟GPS導航");
// 返回開啟GPS導航設定介面
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離線日誌檔案列印
檢測android主屏,並把app從後臺切換置前臺
保持螢幕常亮
斷線重連機制
1)eclipse找不到裝置,adb需要重啟
寫一個.bat檔案,內容如下:
(注意:cd /d D:android-sdksplatform-tools 請替換為自己的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時可能需要重寫的方法有:onCreateOptionMenu()和onOptionItemSelected().
②eclipse編輯器亂碼解決
configChanges詳解-之解決問題:手機切換字型後,app異常崩潰
eclipse建立app時多出appcompat_v7
android開發誤刪appcompat_v7
Replace “…” with ellipsis character (…, &&;#8230;) ?
eclipse ‘Launching Hello’has encountered a problem
想看更多資訊請關注我!