android知識點總結

1,Android UI體系

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2,Android基礎

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

3,Android底層

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系統架構

4,進程和同步

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建立時建立一個消息隊列和線程對象,但不是資源池。

5,數據結構和算法

【數據結構】排序算法

【數據結構】查找

【數據結構】樹

【數據結構】圖

【數據結構】數組

【數據結構】隊列和棧

【數據結構】線性表:順序表、單鏈表

【算法】電梯調度算法/磁盤掃描算法

6,設計模式

編程素質】多線程編程之設計模式

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

7,網絡基礎、操做系統基礎

【網絡基礎】TCP/UDP

【數據結構】位運算

【網絡基礎】IP計算

8,數據庫

9,java基礎

【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++區別

10,Android性能優化

1)佈局優化、自定義View優化

刪除佈局中無用的控件和層級

有選擇地使用性能較高的ViewGroup

用<include>標籤、<merge>標籤、ViewStub

2)activity啓動優化

耗時操做優化

佈局文件優化

視圖加載優化。如:Fragment的懶加載,只有顯示時纔去加載。

3)列表優化

儘可能複用convertview歷史的緩存,減小建立新的view對象。

儘可能的減小子孩子的id的查詢次數,定義一個viewHolder。

4)內存優化

5)圖片緩存

圖片的三級緩存機制

11,項目管理

項目管理-Git使用

項目管理-SVN學習

12,應用

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從後臺切換置前臺

保持屏幕常亮

斷線重連機制

13,問題解決

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

相關文章
相關標籤/搜索