《第一行代碼:Android(第2版)》,做者郭霖

據說本書既是Android初學者的入門必備,也是Android開發者的進階首選。那麼就作一個讀書筆記吧。 ###第1章:開始啓程——你的第一行Android代碼java

1.全貌 1.1Android系統架構 Linux內核層:顯示驅動、音頻驅動、照相機驅動、藍牙驅動、WI-FI驅動、電源管理等。 系統運行庫層:SQLite數據庫、3D繪圖支持、Dalvik虛擬機(5.0以後改成ART運行環境) 應用框架層:各類API 應用層:應用程序均屬於這一層android

1.2安卓版本 API 19=4.4 版本、21爲5.0、22爲5.一、23爲6.0、24爲7.0 所需軟件:JDK、Android Studio、Android Studio SDK AppCompatActivity 是一種向下兼容的Activity,能夠將Activity的各個系統版本中增長的特性和功能最低兼容到Android2.1系統。數據庫

build.gradle

第一行應用了一個插件,通常有兩種值可選:com.android.application 表示這是一個應用程序模塊,com.android.library 表示這個是一個庫模塊. android 閉包:compileSdkVersion 指定編譯版本、buildToolVersion用於指定項目構建工具的版本編程

android 閉包下 defaultConfig 閉包:applicationId 用於指定包名(之後修改能夠在這裏修改)、minSdkVersion 用於指定項目最低兼容的Android系統版本、targetSdkVersion 指定的值表示你在該目標版本上已經作過充分測試、versionCode 用於指定版本號、versionName 用於指定版本名數組

android 閉包下 buildTypes 閉包 :通常用於指定生成安裝文件的相關配置,一般只會有兩個閉包,一個是debug另外一個是release.debug閉包用於指定生成測試版安裝文件的配置,能夠忽略不寫。release閉包用於指定生成正式版本安裝文件的配置。minifyEnabled 用於指定是否對項目代碼進行混淆,true 表是混淆,false表示不混淆。proguardFiles 用於指定混淆時使用的規則文件,指定了兩個文件,第一個是 proguard-android.txt 爲通用規則,第二個是 proguard-rules.pro 特有的混淆規則。服務器

dependencies 閉包:指定當前項目全部的依賴關係,本地依賴compile fileTree、庫依賴、遠程依賴compile。testCompile 是用於聲明測試用例庫的,暫時忽略它。網絡

1.3日誌工具 log.v log.d log.i log.w log.e 傳入2個參數 第一個參數是tag 用於過濾,第二個是msg 是具體內容。 Show only selected application 表示只顯示當前過濾。No Filters 表示沒有。數據結構

###第2章 先從看獲得的入手——探究活動多線程

1.活動Activity 全部的活動要在AndroidManifest.xml中進行註冊才能生效。 在活動中使用Menu:右擊res目錄->New->Directory->輸入文件夾名字menu,點擊ok->接着在整個文件夾下新建一個名叫main的菜單文件->建立兩個菜單項->回到activity中重寫onCreateOptionsMenu()方法->建立菜單響應事件重寫onOptionsItemSelected()方法,在這個方法中經過item.getItemId判斷點擊的是哪一個選項->從新運行程序就會發現標題欄右側多了一個三點的符號,點擊後顯示內容。 銷燬活動:finish();閉包

2.Intent 通常用於啓動活動,啓動服務,發送廣播等,傳遞數據時將putExtra();重載便可。 startActivityForResult()啓動Activity,要在當前activity中運行onActivityResult()方法,根據第一個參數requestCode來判斷消息來源。若是在第二個活動中經過back鍵回到第一個活動,要重寫onBackPressed()方法解決這個問題。

3.活動的生命週期 Task任務,BackStack返回棧,棧是一種後進先出的數據結構。 活動狀態分爲 運行狀態(位於棧頂)、暫停狀態(不全屏)、中止狀態(徹底不可見)、銷燬狀態(移除)

生存期: onCreate() 加載佈局,綁定事件 onStart() 活動由不可見變爲可見的時候調用 onResume() 在活動準備好和用戶進行交互的時候調用,此時活動必定位於返回棧的棧頂 onPause() 在系統準備去啓動或者恢復另外一個活動的時候調用 onStop() 在活動徹底不可見時調用,啓動新的對話框活動,onPause() 會執行,這個不會執行 onDestroy() 在活動銷燬以前調用 onRestart() 在活動由中止狀態變爲運行狀態以前調用,活動被從新啓動

活動的生命週期

4.活動回收 onSaveInstanceState() 會攜帶一個Bundle 類型的參數,Bundle 提供了一系列的putxxx方法用於保存數據,若是在活動A中重寫這個方法,再打開活動B系統回收了A,要在活動A的onCreate()方法 對 saveInstanceState 進行判斷 ,若是不等於空調用getxxx方法傳入鍵即可得到保存的數據。也能夠用Intent結合Bundle存儲數據。

5.啓動模式 standard 默認啓動模式 建立實例添加到棧頂 singleTop 若是返回棧的棧頂已是該活動 就不建立新實例 若是不是 就建立 singleTask 每次啓動檢查返回棧中是否有實例,若是有則直接使用,並把這個活動之上的全部活動通通出棧,若是沒有就建立新實例。 singleInstance 回啓動一個新的返回棧,容許其餘程序調用,共享活動實例

6.實踐 如何知曉當前是哪個活動:新建一個BaseActivity普通java類,繼承AppCompatActivity 重寫onCreate 方法,在方法中 Log.d("BaseActivity",getClass().getSimpleName); 而後讓其餘activity繼承Baseactivity 後觀察log信息,進入哪一個活動界面,該活動的類就會被打印出來。

隨時隨地退出程序:新建一個ActivityCollector類做爲活動管理器,new 一個泛型爲Activity的集合,編寫add、remove、finish的方法(遍歷集合若是!activity.isFinishing() 就activity.finish();)。修改BaseActivity的方法,在onCreate中調用add方法,在onDestroy中調用remove方法,今後想在任何地方退出程序,直接調用finish方法即可。固然還能夠在銷燬全部活動後面殺掉當前的進程,android.os.Process.killProcess(android.os.Process.myPid());

啓動活動的最佳方法:在目標Activity中編寫actionStart方法,在這個方法中完成Intent的構建,全部須要的數據都從方法參數傳遞過來,而後儲存到intent中,在調用startActivity(intent);這樣讓啓動變得簡單。

###第3章:軟件也要拼臉蛋——UI開發的點點滴滴

1.如何編寫程序界面 Textview 字體大小使用sp gravity:center 等於 center_vertical|center_horizontal 表示文字在垂直和水平方向都居中對齊。 Button 系統會對button中全部英文字母進行大寫轉換 可經過 textAllCaps="false" 轉換 EditText maxLines="2" 最大行數爲2行 ProgressBar 默認圓形 水平進度條是 style="?android:attr/progressBarStyleHorizontal" max="100"
//設置最大值 AlertDialog 對話框 ProgressDialog 若是在setCancelable() 傳入false 不能經過back鍵取消掉

2.佈局 線性佈局 layout_gravity 用於指定控件在佈局中的對齊方式。當橫向排列時,垂直方向對其纔會生效。當豎向排列的時候,水平方向對其纔會生效。 相對佈局 在。。。之上下左右,在父佈局上下左右。。。 幀佈局 全部控件都默認擺放在左上角 百分比佈局 添加依賴:compile 'com.android.support:percent:24.2.1' .xml 文件中 最外層爲<android.support.percent.PercentFrameLayout> 還必須定義一個app命名空間 才能使用百分比佈局的自定義屬性。

3.自定義控件 listview RecyclerView 條目點擊事件 能夠 在adapter 的onCreateViewHolder 中 由 holder.xxx.setonClickListener 分別設置文字與圖片的 點擊事件。 製做.9圖片

###第4章:手機平板要兼顧——探究碎片 1.碎片 Fragment 動態添加Fragment、 碎片模擬返回棧 在提交事務前調用 addToBackStack()方法、 onAttach() 當碎片和活動創建關聯時候調用的 onCreateView() 爲碎片建立視圖(加載佈局)時調用 onActivityCreate() 確保與碎片相關聯的活動必定已經完成建立完畢的時候調用的 onDestoryView() 當與碎片關聯的視圖被移除的時候調用 onDetach() 當碎片和活動解除關聯的時候調用 在res目錄下新建layout-sw600dp文件夾,在這個文件夾下新建activity_main.xml 佈局,這就意味着當程序運行在屏幕寬度大於600dp的設備上時,會加載這個佈局。 2.簡易的新聞應用

###第5章:全局大喇叭——詳解廣播機制 1.有序廣播、無序廣播

2.接收廣播 動態:新建一個類繼承Broadcast-Receiver 重寫 onReceive() 方法。 網絡發生變化時系統會發出 "android.net.conn.CONNECTIVITY_CHANGE" 這個廣播 靜態:靜態的廣播接收器必定要在AndroidManifest.xml文件中註冊

3.發送自定義廣播 標準廣播:清單文件中註冊廣播,Intent 中傳入廣播的具體消息,經過sendBroadcast(intent)發送。 發送有序廣播:sendOrderedBroadcast(intent,null); 能夠在配置文件中經過 Android:priority 屬性設置優先級 ,若是在廣播中 調用abortBroadcast() 就能夠攔截廣播,後面沒法再接收到

4.使用本地廣播 ? 經過LocalBroadcastManager的getInstance()方法獲得實例的。 沒法經過靜態註冊方式接收

###第6章:數據存儲全方案——詳解持久化技術 1.持久化技術 文件存儲、SharedPreference、數據庫存儲

文件存儲:FileOutputStream、FileInputStream TextUtils.isEmpty() 可進行兩種空值的判斷 包括null 和 "".

SQLite 輕量級的關係型數據庫 不只支持SQL語法 還支持ACID事務 SQLiteOpenHelper.getReadableDatabase(); LitePal 增刪改查數據庫

###第7章:跨程序共享數據——探究內容提供者 1.內容提供者

2.運行時權限 危險權限 一共9組24個、權限組名爲:CALENDAR、CAMERA、CONTACTS、LOCATION、MICROPHONE、PHONE、SENSORS、SMS、STORAGE、 先判斷用戶是否給咱們受權了用ContextCompat.checkSelfPermission()方法,第二個參數是權限名。若是未受權調用ActivityCompat.requestPermissions()方法向用戶申請受權,第二個參數是String數組,將權限名放在數組中,第三個參數是請求碼。系統會彈出一個對話框,不管選擇哪一個都會調用onRequest-permissionsResult()方法,能夠在這個回調中處理業務。

3.訪問其餘應用的數據 getContentResolver()後 調用增刪改查的方法,接收URI。查詢後返回一個Cursor對象遍歷後獲得數據

4.建立本身的內容提供器 寫一個類繼承ContentProvider重寫6個方法,onCreate() 返回true 表示初始化成功。query() 查詢、insert() 添加、update() 升級、delete() 刪除、getType() 根據傳入的內容URI返回MIME類型。

###第8章:豐富你的程序——運用手機多媒體 1.通知 Notification 使用V4庫中提供NotificationCompat類,new NotificationCompat.Builder(content).build();當點擊通知的時候就會啓動延時意圖PendingIntent 傳入intent 打開界面。經過建立通知時調用 setContentIntent(pi)添加進去,若是要點擊取消 連綴一個 setAutoCancel()方法 傳入true 點擊後就會取消。若是連綴 setSound()方法並傳入一個Uri參數,那麼就能夠接到通知的時候播放一段音頻。若是連綴setVibrate()傳入長整型的數據 用於設置手機震動的時長,單位是毫秒,若是使用要添加震動的權限。若是連綴setLights()傳入 顏色和兩個時長 就會啓動手機led燈,若是想直接使用默認的鈴聲和震動 那麼調用setDefault()方法,傳入DEFAULT_ALL便可。 若是構建出富文本的 通知內容調用setStyle()方法。設置通知最高級別調用setPriority()方法。

2.調用攝像頭和相冊 Demo1攝像頭拍照後顯示圖片. Demo2選擇相冊中的圖片

3.播放多媒體文件 播放音頻、播放視頻

###第9章:看看精彩的世界——使用網絡技術 1.WebView用法

2.使用HTTP協議訪問網絡 HttpURLConnection connection=(httpurlconnection)url.openConnection();就獲得了實例,設置setRequestMethod("GET") 表示但願從服務器那裏獲取數據,而post則表示但願提交數據給服務器。setConnectTimeout(8000)設置鏈接超時,setReadTimeout(8000)設置讀取超時。調用getInputStream()讀取輸入流,最後調用disconnect()將http鏈接關閉掉。

使用okhttp訪問網絡。

3.解析數據 XML格式是數據 Pull 解析、SAX 解析、 JSON格式數據 JSONObject 解析、GSON解析、

###第10章:後臺默默的勞動者——探究服務 1.服務Service 2.Android多線程編程

@Override
public void run(){
//具體的邏輯
  }
}).start();
複製代碼

使用AsyncTask 裏邊有4個方法,onPreExecute() 方法會在後臺任務開始執行前調用、deInBackground(Params...) 方法都會在子線程執行、onProgressUpdate(Progress...) 在這個方法能夠對UI進行操做、onPostExcute(Result) 當後臺執行完畢後調用。

3.服務的基本用法 寫一個類繼承Service 重寫onBind()、 onCreate()、onStartCommand 和 onDestroy() 其中 onStartCommand 方法每次服務啓動的時候都會調用,每一個服務都須要在清單文件中註冊。 啓動服務 startService(intent),stopService(intent)中止服務。

活動和服務通訊:在服務的onBind()中 return mBinder; 在Activity中 new ServiceConnection(){}重寫 onServiceConnected()方法,經過向下轉型獲得binder實例調用 Binder類中的任何public方法,當綁定服務時調用 bindService()方法綁定Activity和Service,傳入 3個參數 第一個是intent 第二個是ServiceConnection的實例,第三個是標誌位傳入 BIND_AUTO_CREATE 表示活動和服務綁定後會自動建立服務,使服務的onCreate()方法獲得執行,可是onstartCommand()方法不會執行。解除綁定調用unbindService()方法。

4.服務的生命週期 startForeground()方法 傳入id和Notification對象,可讓服務變爲前臺服務。 IntentService 寫一個類繼承IntentService實現onHandleIntent()方法,這個方法在子線程運行,能夠處理一些具體邏輯。

###第11章:Android特點開發——基於位置的服務 1.百度地圖

###第12章:最佳的UI體驗——Material Design實戰 1.material design ToolBar、DrawerLayout、NavigationView、FloatingActionButton、Snackbar、CoordinatorLayout、CardView、AppBarLayout、SwipeRefreshLayout、CollapsingToolbarLayout(可摺疊的標題欄)、

###第13章:繼續進階——你還應該掌握的高級技巧 1.全局獲取Context 2.使用Intent傳遞對象 實現Serializable、實現Parcelable、 3.定製本身的日誌工具 4.調試Android程序 5.建立定時任務 Alarm機制、Doze模式、 六、多窗口模式編程 七、Lambda表達式

###第14章:開發酷歐天氣 ###第15章:最後一步——將應用發佈到360應用商店 1.生成正式簽名和APK 2.多渠道打包 3.註冊360發佈程序 4.嵌入廣告進行盈利

相關文章
相關標籤/搜索