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

聽說本書既是Android初學者的入門必備粥谬,也是Android開發(fā)者的進階首選。那么就做一個讀書筆記吧衡创。

第1章:開始啟程——你的第一行Android代碼

1.全貌
1.1Android系統(tǒng)架構(gòu)
Linux內(nèi)核層:顯示驅(qū)動帝嗡、音頻驅(qū)動、照相機驅(qū)動璃氢、藍牙驅(qū)動哟玷、WI-FI驅(qū)動、電源管理等一也。
系統(tǒng)運行庫層:SQLite數(shù)據(jù)庫巢寡、3D繪圖支持、Dalvik虛擬機(5.0之后改為ART運行環(huán)境)
應用框架層:各種API
應用層:應用程序均屬于這一層

1.2安卓版本
API 19=4.4 版本椰苟、21為5.0抑月、22為5.1、23為6.0舆蝴、24為7.0
所需軟件:JDK谦絮、Android Studio、Android Studio SDK
AppCompatActivity 是一種向下兼容的Activity洁仗,可以將Activity的各個系統(tǒng)版本中增加的特性和功能最低兼容到Android2.1系統(tǒng)层皱。

build.gradle

第一行應用了一個插件,一般有兩種值可選:com.android.application 表示這是一個應用程序模塊赠潦,com.android.library 表示這個是一個庫模塊.
android 閉包:compileSdkVersion 指定編譯版本叫胖、buildToolVersion用于指定項目構(gòu)建工具的版本

android 閉包下 defaultConfig 閉包:applicationId 用于指定包名(以后修改可以在這里修改)、minSdkVersion 用于指定項目最低兼容的Android系統(tǒng)版本她奥、targetSdkVersion 指定的值表示你在該目標版本上已經(jīng)做過充分測試瓮增、versionCode 用于指定版本號怎棱、versionName 用于指定版本名

android 閉包下 buildTypes 閉包 :一般用于指定生成安裝文件的相關配置,通常只會有兩個閉包绷跑,一個是debug另一個是release.debug閉包用于指定生成測試版安裝文件的配置拳恋,可以忽略不寫。release閉包用于指定生成正式版本安裝文件的配置你踩。minifyEnabled 用于指定是否對項目代碼進行混淆诅岩,true 表是混淆,false表示不混淆带膜。proguardFiles 用于指定混淆時使用的規(guī)則文件吩谦,指定了兩個文件,第一個是 proguard-android.txt 為通用規(guī)則膝藕,第二個是 proguard-rules.pro 特有的混淆規(guī)則式廷。

dependencies 閉包:指定當前項目所有的依賴關系,本地依賴compile fileTree芭挽、庫依賴滑废、遠程依賴compile。testCompile 是用于聲明測試用例庫的袜爪,暫時忽略它蠕趁。

1.3日志工具
log.v log.d log.i log.w log.e
傳入2個參數(shù) 第一個參數(shù)是tag 用于過濾,第二個是msg 是具體內(nèi)容辛馆。
Show only selected application 表示只顯示當前過濾俺陋。No Filters 表示沒有。

第2章 先從看得到的入手——探究活動

1.活動Activity
所有的活動要在AndroidManifest.xml中進行注冊才能生效昙篙。
在活動中使用Menu:右擊res目錄->New->Directory->輸入文件夾名字menu,點擊ok->接著在整個文件夾下新建一個名叫main的菜單文件->創(chuàng)建兩個菜單項<item>->回到activity中重寫onCreateOptionsMenu()方法->創(chuàng)建菜單響應事件重寫onOptionsItemSelected()方法腊状,在這個方法中通過item.getItemId判斷點擊的是哪個選項->重新運行程序就會發(fā)現(xiàn)標題欄右側(cè)多了一個三點的符號,點擊后顯示內(nèi)容苔可。
銷毀活動:finish();

2.Intent
一般用于啟動活動缴挖,啟動服務,發(fā)送廣播等焚辅,傳遞數(shù)據(jù)時將putExtra();重載即可映屋。
startActivityForResult()啟動Activity,要在當前activity中運行onActivityResult()方法同蜻,根據(jù)第一個參數(shù)requestCode來判斷消息來源秧荆。如果在第二個活動中通過back鍵回到第一個活動,要重寫onBackPressed()方法解決這個問題埃仪。

3.活動的生命周期
Task任務,BackStack返回棧陕赃,棧是一種后進先出的數(shù)據(jù)結(jié)構(gòu)卵蛉。
活動狀態(tài)分為 運行狀態(tài)(位于棧頂)颁股、暫停狀態(tài)(不全屏)、停止狀態(tài)(完全不可見)傻丝、銷毀狀態(tài)(移除)

生存期:
onCreate() 加載布局甘有,綁定事件
onStart() 活動由不可見變?yōu)榭梢姷臅r候調(diào)用
onResume() 在活動準備好和用戶進行交互的時候調(diào)用,此時活動一定位于返回棧的棧頂
onPause() 在系統(tǒng)準備去啟動或者恢復另一個活動的時候調(diào)用
onStop() 在活動完全不可見時調(diào)用葡缰,啟動新的對話框活動亏掀,onPause() 會執(zhí)行,這個不會執(zhí)行
onDestroy() 在活動銷毀之前調(diào)用
onRestart() 在活動由停止狀態(tài)變?yōu)檫\行狀態(tài)之前調(diào)用泛释,活動被重新啟動

活動的生命周期

4.活動回收
onSaveInstanceState() 會攜帶一個Bundle 類型的參數(shù)滤愕,Bundle 提供了一系列的putxxx方法用于保存數(shù)據(jù),如果在活動A中重寫這個方法怜校,再打開活動B系統(tǒng)回收了A间影,要在活動A的onCreate()方法 對 saveInstanceState 進行判斷 ,如果不等于空調(diào)用getxxx方法傳入鍵便可獲得保存的數(shù)據(jù)茄茁。也可以用Intent結(jié)合Bundle存儲數(shù)據(jù)魂贬。

5.啟動模式
standard 默認啟動模式 創(chuàng)建實例添加到棧頂
singleTop 如果返回棧的棧頂已經(jīng)是該活動 就不創(chuàng)建新實例 如果不是 就創(chuàng)建
singleTask 每次啟動檢查返回棧中是否有實例,如果有則直接使用裙顽,并把這個活動之上的所有活動統(tǒng)統(tǒng)出棧付燥,如果沒有就創(chuàng)建新實例。
singleInstance 回啟動一個新的返回棧愈犹,允許其他程序調(diào)用键科,共享活動實例

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中調(diào)用add方法,在onDestroy中調(diào)用remove方法入挣,從此想在任何地方退出程序亿乳,直接調(diào)用finish方法便可。當然還可以在銷毀所有活動后面殺掉當前的進程,android.os.Process.killProcess(android.os.Process.myPid());

啟動活動的最佳方法:在目標Activity中編寫actionStart方法葛假,在這個方法中完成Intent的構(gòu)建障陶,所有需要的數(shù)據(jù)都從方法參數(shù)傳遞過來,然后儲存到intent中聊训,在調(diào)用startActivity(intent);這樣讓啟動變得簡單抱究。

第3章:軟件也要拼臉蛋——UI開發(fā)的點點滴滴

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

2.布局
線性布局
layout_gravity 用于指定控件在布局中的對齊方式带斑。當橫向排列時鼓寺,垂直方向?qū)ζ洳艜А.斬Q向排列的時候勋磕,水平方向?qū)ζ洳艜А?br> 相對布局
在妈候。。朋凉。之上下左右州丹,在父布局上下左右。杂彭。墓毒。
幀布局
所有控件都默認擺放在左上角
百分比布局
添加依賴: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
動態(tài)添加Fragment所计、
碎片模擬返回棧 在提交事務前調(diào)用 addToBackStack()方法、
onAttach() 當碎片和活動建立關聯(lián)時候調(diào)用的
onCreateView() 為碎片創(chuàng)建視圖(加載布局)時調(diào)用
onActivityCreate() 確保與碎片相關聯(lián)的活動一定已經(jīng)完成創(chuàng)建完畢的時候調(diào)用的
onDestoryView() 當與碎片關聯(lián)的視圖被移除的時候調(diào)用
onDetach() 當碎片和活動解除關聯(lián)的時候調(diào)用
在res目錄下新建layout-sw600dp文件夾团秽,在這個文件夾下新建activity_main.xml 布局主胧,這就意味著當程序運行在屏幕寬度大于600dp的設備上時,會加載這個布局习勤。
2.簡易的新聞應用

第5章:全局大喇叭——詳解廣播機制

1.有序廣播踪栋、無序廣播

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

3.發(fā)送自定義廣播
標準廣播:清單文件中注冊廣播图毕,Intent 中傳入廣播的具體消息夷都,通過sendBroadcast(intent)發(fā)送。
發(fā)送有序廣播:sendOrderedBroadcast(intent,null); 可以在配置文件中通過 Android:priority 屬性設置優(yōu)先級 予颤,如果在廣播中 調(diào)用abortBroadcast() 就可以攔截廣播囤官,后面無法再接收到

4.使用本地廣播 ?
通過LocalBroadcastManager的getInstance()方法得到實例的蛤虐。
無法通過靜態(tài)注冊方式接收

第6章:數(shù)據(jù)存儲全方案——詳解持久化技術

1.持久化技術
文件存儲党饮、SharedPreference、數(shù)據(jù)庫存儲

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

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

第7章:跨程序共享數(shù)據(jù)——探究內(nèi)容提供者

1.內(nèi)容提供者

2.運行時權限
危險權限 一共9組24個刑顺、權限組名為:CALENDAR、CAMERA、CONTACTS捏检、LOCATION荞驴、MICROPHONE、PHONE贯城、SENSORS、SMS霹娄、STORAGE能犯、
先判斷用戶是否給我們授權了用ContextCompat.checkSelfPermission()方法,第二個參數(shù)是權限名犬耻。如果未授權調(diào)用ActivityCompat.requestPermissions()方法向用戶申請授權踩晶,第二個參數(shù)是String數(shù)組,將權限名放在數(shù)組中枕磁,第三個參數(shù)是請求碼渡蜻。系統(tǒng)會彈出一個對話框,無論選擇哪個都會調(diào)用onRequest-permissionsResult()方法计济,可以在這個回調(diào)中處理業(yè)務茸苇。

3.訪問其他應用的數(shù)據(jù)
getContentResolver()后 調(diào)用增刪改查的方法,接收URI沦寂。查詢后返回一個Cursor對象遍歷后得到數(shù)據(jù)

4.創(chuàng)建自己的內(nèi)容提供器
寫一個類繼承ContentProvider重寫6個方法学密,onCreate() 返回true 表示初始化成功。query() 查詢传藏、insert() 添加腻暮、update() 升級、delete() 刪除毯侦、getType() 根據(jù)傳入的內(nèi)容URI返回MIME類型哭靖。

第8章:豐富你的程序——運用手機多媒體

1.通知 Notification
使用V4庫中提供NotificationCompat類,new NotificationCompat.Builder(content).build();當點擊通知的時候就會啟動延時意圖PendingIntent 傳入intent 打開界面侈离。通過創(chuàng)建通知時調(diào)用 setContentIntent(pi)添加進去试幽,如果要點擊取消 連綴一個 setAutoCancel()方法 傳入true 點擊后就會取消。如果連綴 setSound()方法并傳入一個Uri參數(shù)霍狰,那么就可以接到通知的時候播放一段音頻抡草。如果連綴setVibrate()傳入長整型的數(shù)據(jù) 用于設置手機震動的時長,單位是毫秒蔗坯,如果使用要添加震動的權限康震。如果連綴setLights()傳入 顏色和兩個時長 就會啟動手機led燈,如果想直接使用默認的鈴聲和震動 那么調(diào)用setDefault()方法宾濒,傳入DEFAULT_ALL即可腿短。
如果構(gòu)建出富文本的 通知內(nèi)容調(diào)用setStyle()方法。設置通知最高級別調(diào)用setPriority()方法。

2.調(diào)用攝像頭和相冊
Demo1攝像頭拍照后顯示圖片.
Demo2選擇相冊中的圖片

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

第9章:看看精彩的世界——使用網(wǎng)絡技術

1.WebView用法

2.使用HTTP協(xié)議訪問網(wǎng)絡
HttpURLConnection connection=(httpurlconnection)url.openConnection();就得到了實例赴魁,設置setRequestMethod("GET") 表示希望從服務器那里獲取數(shù)據(jù),而post則表示希望提交數(shù)據(jù)給服務器钝诚。setConnectTimeout(8000)設置連接超時颖御,setReadTimeout(8000)設置讀取超時。調(diào)用getInputStream()讀取輸入流凝颇,最后調(diào)用disconnect()將http連接關閉掉潘拱。

使用okhttp訪問網(wǎng)絡。

3.解析數(shù)據(jù)
XML格式是數(shù)據(jù)
Pull 解析拧略、SAX 解析芦岂、
JSON格式數(shù)據(jù)
JSONObject 解析、GSON解析垫蛆、

第10章:后臺默默的勞動者——探究服務

1.服務Service
2.Android多線程編程

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

使用AsyncTask 里邊有4個方法禽最,onPreExecute() 方法會在后臺任務開始執(zhí)行前調(diào)用、deInBackground(Params...) 方法都會在子線程執(zhí)行袱饭、onProgressUpdate(Progress...) 在這個方法可以對UI進行操作川无、onPostExcute(Result) 當后臺執(zhí)行完畢后調(diào)用。

3.服務的基本用法
寫一個類繼承Service 重寫onBind()宁赤、 onCreate()舀透、onStartCommand 和 onDestroy() 其中 onStartCommand 方法每次服務啟動的時候都會調(diào)用,每個服務都需要在清單文件中注冊决左。
啟動服務 startService(intent),stopService(intent)停止服務愕够。

活動和服務通信:在服務的onBind()中 return mBinder; 在Activity中 new ServiceConnection(){}重寫 onServiceConnected()方法,通過向下轉(zhuǎn)型得到binder實例調(diào)用 Binder類中的任何public方法佛猛,當綁定服務時調(diào)用 bindService()方法綁定Activity和Service惑芭,傳入 3個參數(shù) 第一個是intent 第二個是ServiceConnection的實例,第三個是標志位傳入 BIND_AUTO_CREATE 表示活動和服務綁定后會自動創(chuàng)建服務继找,使服務的onCreate()方法得到執(zhí)行遂跟,但是onstartCommand()方法不會執(zhí)行。解除綁定調(diào)用unbindService()方法婴渡。

4.服務的生命周期
startForeground()方法 傳入id和Notification對象幻锁,可以讓服務變?yōu)榍芭_服務。
IntentService 寫一個類繼承IntentService實現(xiàn)onHandleIntent()方法边臼,這個方法在子線程運行哄尔,可以處理一些具體邏輯。

第11章:Android特色開發(fā)——基于位置的服務

1.百度地圖

第12章:最佳的UI體驗——Material Design實戰(zhàn)

1.material design
ToolBar柠并、DrawerLayout岭接、NavigationView富拗、FloatingActionButton、Snackbar鸣戴、CoordinatorLayout啃沪、CardView、AppBarLayout窄锅、SwipeRefreshLayout创千、CollapsingToolbarLayout(可折疊的標題欄)、

第13章:繼續(xù)進階——你還應該掌握的高級技巧

1.全局獲取Context
2.使用Intent傳遞對象
實現(xiàn)Serializable入偷、實現(xiàn)Parcelable签餐、
3.定制自己的日志工具
4.調(diào)試Android程序
5.創(chuàng)建定時任務
Alarm機制、Doze模式盯串、
6、多窗口模式編程
7戒良、Lambda表達式

第14章:開發(fā)酷歐天氣

第15章:最后一步——將應用發(fā)布到360應用商店

1.生成正式簽名和APK
2.多渠道打包
3.注冊360發(fā)布程序
4.嵌入廣告進行盈利

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末体捏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糯崎,更是在濱河造成了極大的恐慌几缭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡馆揉,警方通過查閱死者的電腦和手機爵川,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來员魏,“玉大人,你說我怎么就攤上這事》窀保” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵崎坊,是天一觀的道長备禀。 經(jīng)常有香客問我,道長奈揍,這世上最難降的妖魔是什么曲尸? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮男翰,結(jié)果婚禮上另患,老公的妹妹穿的比我還像新娘。我一直安慰自己奏篙,他們只是感情好柴淘,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布迫淹。 她就那樣靜靜地躺著,像睡著了一般为严。 火紅的嫁衣襯著肌膚如雪敛熬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天第股,我揣著相機與錄音应民,去河邊找鬼。 笑死夕吻,一個胖子當著我的面吹牛诲锹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涉馅,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼归园,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了稚矿?” 一聲冷哼從身側(cè)響起庸诱,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晤揣,沒想到半個月后桥爽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡昧识,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年钠四,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跪楞。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡缀去,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出习霹,到底是詐尸還是另有隱情朵耕,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布淋叶,位于F島的核電站阎曹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏煞檩。R本人自食惡果不足惜处嫌,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斟湃。 院中可真熱鬧熏迹,春花似錦、人聲如沸凝赛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捆昏,卻和暖如春赚楚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骗卜。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工宠页, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寇仓。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓举户,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遍烦。 傳聞我的和親對象是個殘疾皇子俭嘁,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容