安卓系統(tǒng)是開源的
命名規(guī)則:1.5版本后用甜點(diǎn)作為代號
五大布局,
FrameLayout(框架布局)
LinearLayout(線性布局)
Gridlayout(絕對布局)
RelativeLayout(相對布局)
TableLayout(表格布局)
activity的生命周期
- onCreate(); 當(dāng)Activity第一次被創(chuàng)建的時候,就會調(diào)用OnCreate()方法,在 OnCreate()方法中,通常要設(shè)置Activity所使用的布局文件,對按 鈕綁定監(jiān)聽器等等靜態(tài)的設(shè)置操作。
- onResume(); 當(dāng)這個Activity能夠獲得用戶焦點(diǎn)(即用戶在屏幕上進(jìn)行操作的時 候
- onPause(); 當(dāng)?shù)谝粋€Activity通過Intent啟動第二個Activity的時候,則會先調(diào)用 前一個Activity的onPause()方法
- onStop(); 當(dāng)?shù)诙€Activity把第一個Activity完全遮擋住的時候,即對用戶來說 第一個Activity處于完全不可見的時候,那么第一個Activity則調(diào)用 onStop()方法將當(dāng)前Activity關(guān)閉。
- onDestory(); 此方法將Activity銷毀,銷毀之后,若想再調(diào)用此Activity,則需要從 新調(diào)用onCreate方法
頁面跳轉(zhuǎn)同時頁面值的雙向傳遞
Bundle bundle = new Bundle();
bundle.putSerializable("user", user);
intent.putExtras(bundle);
Intent intent = this.getIntent();
user=(User)intent.getSerializableExtra("user");
Intent顯示隱式區(qū)別
- 顯式intent:通過名字指定目標(biāo)組件。顯式intent通 常用于應(yīng)用程序內(nèi)部消息,如一個活動啟動從屬的服 務(wù)或啟動一個姐妹活動。
- 隱式intent:并不指定目標(biāo)的名字(組件名字字段是 空的)。隱式intent經(jīng)常用于激活其它應(yīng)用程序中的 組件。
調(diào)用系統(tǒng)Action
Fragment的優(yōu)點(diǎn)
- 在Fragment可以使你能夠?qū)ctivity分離成多個可重用 的組件,每個都有它自己的生命周期和UI。
- Fragment可以輕松得創(chuàng)建動態(tài)靈活的UI設(shè)計,可以適 應(yīng)于不同的屏幕尺寸,從手機(jī)到平板電腦。
- Fragment是一個獨(dú)立的模塊,并與activity綁定在一 起,可以靜態(tài)或者在運(yùn)行中動態(tài)地添加、移除、交換等。
- Fragment提供一個新的方式讓你在不同的安卓設(shè)備上 統(tǒng)一你的UI。
- Fragment 解決Activity間的切換不流暢,輕量切換。
- Fragment能替代TabActivity做導(dǎo)航,性能更好。
- Fragment 在4.2版本中新增嵌套fragment使用方法,能夠生成 更好的界面效果。
- Fragment做局部內(nèi)容更新更加方便,可以在Activity中使用多個 Fragment,并在需要的時候加載Fragment,提高性能。
- 可以從startActivityForResult中接收到返回結(jié)果,但是View不能。
android使用MVC的優(yōu)點(diǎn),以及為什么
可以將UI界面顯示部分、 業(yè)務(wù)邏輯和數(shù)據(jù)處理分開。
- 程序員可以將UI設(shè)計交給美工處理,將重點(diǎn)放在核心 代碼的編寫上,從而提高效率;
- 在開發(fā)過程中,便于修改、新增、移除新的模塊;
- Android系統(tǒng)專門提供了“res/values/”目錄下的諸 如strings.xml、colors.xml類型的文件,便于調(diào)用和 修改。
ListView,RecycleView列表展示以及優(yōu)點(diǎn),adapter(需要實(shí)現(xiàn)的三個方法),布局管理器,注意依賴包的添加
- 在android開發(fā)中ListView是比較常 用的組件,它以垂直列表的形式展示 具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度 自適應(yīng)顯示。用于呈現(xiàn)多條布局相同 的顯示內(nèi)容。
- 適配器分為以下三種,均繼承自BaseAdapter:
- ArrayAdapter:支持泛型操作,最為簡單,只能展示一行字。
- SimpleAdapter:有最好的擴(kuò)充性,可以自定義出各種效效果。
- SimpleCursorAdapter:可以認(rèn)為是SimpleAdapter對數(shù)據(jù)庫的 簡單結(jié)合,可以方面的把數(shù)據(jù)庫的內(nèi)容以列表的形式展示出來。
CardView各種設(shè)置
TableLayout調(diào)用addTab的方法加入新頁面
DrawerLayout+Toolbar的使用
Android的四大組件,廣播接收器(定義方法,兩種注冊方法)
-
Activity
使用步驟
- 創(chuàng)建新的Activity,布局名稱LoginActivity,創(chuàng)建布局與創(chuàng)建普通布局文件相同
- 在清單文件中添加
<activity android:name=".LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- 主窗體調(diào)用子窗體,我們假設(shè)從MainActivity跳轉(zhuǎn)至LoginActivity
Intent intent = new Intent();
intent.setClass(MainActivity.this,LoginActivity.class);
startActivity(intent);
-
Service
Service有兩種方式,啟動的和綁定的
啟動的生命周期:創(chuàng)建服務(wù),開始服務(wù),銷毀服務(wù)。
綁定的生命周期:創(chuàng)建服務(wù),綁定服務(wù),解除綁定,銷毀服務(wù)。
-
Broadcast Receiver
廣播接收器的實(shí)現(xiàn):繼承BroadcastReceiver類,重寫onReceive方法
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"這是一個接收 器:"+intent.getStringExtra("receive"),Toast.LENGTH_LONG).show();
}
}
廣播實(shí)現(xiàn)的兩種方式
靜態(tài)注冊(在xml中靜態(tài)指定):在清單文件中注冊BroadcastReceiver
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
動態(tài)注冊(在程序中動態(tài)注冊):在java代碼中注冊BroadcastReceiver
receiveBroadcast = new ReceiveBroadCast();
IntentFilter filter = new IntentFilter();
Filter.addAction(Tag);
registerReceiver(receiveBroadcast,filter)
區(qū)別:作用范圍不同,動態(tài)注冊只在程序過程中有效,靜態(tài)注冊是不管程序是否啟動都有用
-
Content Provider
提供了應(yīng)用程序之間共享數(shù)據(jù)的方法,為存儲和 讀取數(shù)據(jù)提供了統(tǒng)一的接口。
- URI:content://com.example.stuprovider/StuInfo/2/name
表示需要操作StuInfo表中ID為2的記錄的name字段 - ContentResolver方法介紹:
- query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder): 通過uri進(jìn)行查詢,返回一個Cursor
- insert(Uri url, ContentValues values): 向uri對應(yīng)的ContentProvider中插入values對應(yīng)的數(shù) 據(jù),返回最新添加記錄的uri。
- update(Uri uri, ContentValues values, String where, String[] selectionArgs): 更新Uri指定位置的數(shù)據(jù),返回更新的行數(shù)。
- delete(Uri url, String where, String[] selectionArgs): 刪除指定Uri并且符合一定條件的數(shù)據(jù),返回刪除的行數(shù)。
Service,啟動狀態(tài)or綁定狀態(tài)
- 通過startService()啟動的服務(wù)處于“啟動的”狀態(tài),一 旦啟動,service就在后臺運(yùn)行,即使啟動它的應(yīng)用組件 已經(jīng)被銷毀了。當(dāng)任務(wù)完成時,為了節(jié)省系統(tǒng)資源,一 定要停止service,可以通過stopSelf()來停止,也可以 在其他組件中通過stopService()來停止。
- “綁定”狀態(tài)的service,通過調(diào)用bindService()來啟動, 一個綁定的service提供一個允許組件與service交互的接 口,可以發(fā)送請求、獲取返回結(jié)果。綁定的service只有 當(dāng)應(yīng)用組件綁定后才能運(yùn)行,多個組件可以綁定一個 service,當(dāng)調(diào)用unbind()方法時,這個service就會被銷 毀了。
發(fā)送短信例子(26以下清單文件指明權(quán)限,26以上是動態(tài))
本地存儲的四種方式:特點(diǎn)及應(yīng)用場景
- SharedPreferences:SharedPreferences提供一套 完整的存儲基本類型數(shù)據(jù)的方法,可以將數(shù)據(jù)保存到 私有數(shù)據(jù)區(qū),只能被寫入這些數(shù)據(jù)的應(yīng)用程序讀取。
- Internal Storage:手機(jī)內(nèi)部存儲,以文件方式保存 數(shù)據(jù),只能本程序使用,外部的應(yīng)用程序無法訪問該 文件;需要注意的是,文件也是臨時性的,當(dāng)卸載本 程序時,該文件也會被刪除。
- External Storage:手機(jī)的外部存儲(如SD卡),也是以文 件的形式存儲數(shù)據(jù),一般存儲數(shù)據(jù)量較大的公共數(shù)據(jù)。需 注意的是,保存在外部存儲設(shè)備的數(shù)據(jù)是公開且不安全的, 用戶可以自由進(jìn)行讀寫操作,甚至可以刪除。
- SQLite Database:SQLite是標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫,具有 小巧、獨(dú)立性高、安全性高、跨平臺和多語言接口等優(yōu)點(diǎn), 用戶可以使用標(biāo)準(zhǔn)的SQL語句進(jìn)行數(shù)據(jù)的增刪改查。它內(nèi) 置于Android系統(tǒng)中,一般用于存儲復(fù)雜類型的數(shù)據(jù)。
SharedPreferences的四種操作模式,保存數(shù)據(jù)時不要忘記commit()
- Context.MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù) 據(jù),只能被應(yīng)用本身訪問,在該模式下 寫入的內(nèi)容會覆蓋原文件的內(nèi)容
- Context.MODE_APPEND:該模式會檢查文件是否存在,存在就往 文件追加內(nèi)容,否則就創(chuàng)建新文件
- Context.MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀取
- Context.MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入