1) 三層架構、MVC、MVP、MVVMjava
對於小項目能夠按以下分法(mvp選用);對於大項目能夠按模塊分,而後模塊內再按以下分發。android
分包(按功能分):web
basal:基類;正則表達式
surface(fragment、activity、broadcast、listener):界面類;redis
adapter:適配器類;算法
mvp(presenter、constract、view):mvp層類;sql
util:通用工具類;數據庫
widget:自定義View類;編程
entity:實體類;設計模式
Config.class
MyApplication
2)xml(Extensible Markup Language,可擴展標記語言)
字體通常是34px、30px、28px、26px、24px、22px
小細線1px dddddd 粗線10px f5f5f5 背景色f5f5f五、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)四大組件-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
當你須要讓對象返回以前的狀態時(例如:用戶請求撤銷操做),就使用備忘錄模式
22.原型模式Prototype Pattern
23.訪問者模式Visitor Pattern
【網絡基礎】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);
}
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;
}
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
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