能夠幫助到大家,我感到非常地開心。隱約發(fā)現(xiàn)我自從上周總結(jié)完了之后,就沒有好好的看過 Android 了,心中充滿了恐懼,%><%,希望明天不要掛,我想靜靜了。
能夠舍己為人,這也是一種非常好地品質(zhì)。掛我一個,成就大家,(*^_^*) 嘻嘻……此生無憾,誰叫我是雷鋒呢。

Android架構(gòu)層次
- 4層:
- 應用程序?qū)樱?
- 手機上的app。
- 應用程序框架層,
- 開發(fā)app用到的api接口。
- 核心類庫,
- 系統(tǒng)庫 & Android 運行環(huán)境。
- Linux內(nèi)核。
- 提供硬件驅(qū)動。
- 應用程序?qū)樱?
AndroidManifest.xml清單文件的主要內(nèi)容
- 四大組件注冊
- 權(quán)限聲明
- 程序最低兼容的版本和最高版本
四大組件及其注冊(重要)
-
Activity(管理Android應用程序的用戶界面)
<activity android:name="cn.itcast.activitybasic.ActivityExample" android:label="ActivityExample"> <intent-filter> <action android:name="android.intent.action.MAIN"> // 表示將當前 Activity 設(shè)置為程序最先啟動的 Activity。 <category android:name="android.intent.category.LAUNCHER"> // 表示讓當前 Activity 在桌面上創(chuàng)建圖標。 </intent-filter> </activity> -
內(nèi)容提供者(ContentProvider)(用于保存和檢索數(shù)據(jù))
<provider android:name="cn.itcast.db.PersonDBProvider" // 代表繼承于 ContentProvider 類的全路徑名稱 android:authorities="cn.itcast.db.personprovider"> // 代表了訪問本 provider 的路徑 </provider> -
廣播接收者
// 注冊常駐型廣播 <receiver android:name="cn.itcast.MyBroadcastReceiver"> // 創(chuàng)建的廣播接收者的全路徑名; <intent-filter android:priority="20"> // 該廣播的優(yōu)先級 <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> // 注冊非常駐型廣播 MyBroadcastReceiver receiver = new MyBroadcastReceiver(); // 實例化過濾器并設(shè)置要過濾的廣播 String action = "android.provider.Telephony.SMS_RECEIVED"; IntentFilter intentFilter = new IntentFilter(action); // 注冊廣播 registerReceiver(receiver, intentFilter); -
服務(service) 長期在后臺運行且不提供用戶界面。
<service android:name="cn.itcast.startService.MyService" />
布局的xml文件及Java代碼寫法,setContentView, findViewById(重要)
-
RelativeLayout:
相對容器:
layout_align(ParentLeft|ParentTop|ParentRight|ParentBottom)-
相對于控件:
layout_(toRightOf|toLeftOf|above|below)layout_align(Baseline|Left|Right|Top|Bottom)
-
LinearLayout:
分為兩種:水平線性布局 & 垂直線性布局。
-
使用方法:
<LinearLayout android:orientation="vertical 或者 horizontal"> </LinearLaout>
-
TableLayout:
<TableLayout> <TableRow> <Button android:layout_column="0" /> // 數(shù)值從0開始 </TableRow> </TableLayout> -
GridLayout
<GridLayout android:columnCount="4" android:orientation="horizontal"> <Button android:layout_column="3" /> // 數(shù)值從0開始 <Button /> <Button android:layout_columnSpan="2" /> // or android:layout_rowSpan </GridLayout> FrameLayout
-
AbsoluteLayout
<AbsoluteLayout> <Button android:layout_x="10dp" /> // or android:layout_y </AbsoluteLayout> -
Java 代碼寫法
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Activity創(chuàng)建及使用過程
簡記法: 記不住蟲(繼、布、注、重)
- 定義一個類繼承自
android.app.Activity或者其子類; - 在
res/layout目錄中創(chuàng)建一個 xml 文件,用于創(chuàng)建Activity的布局; - 在
AndroidManifest.xml文件中注冊Activity; - 重寫
Activity的onCreate方法,并在該方法中使用setContentView()加載指定的布局文件。
彈出Toast的程序
Toast 組件有兩個方法:
- makeText() : 用于設(shè)置要顯示的字符串;
- show() :顯示消息框;
```
Toast 變量名稱 = Toast.makeText(Context, Text, Time);
變量名稱.show();
// Context:表示應用程序環(huán)境的信息; 使用方法:"主程序類型.this",e.g. MainActivity.this
// Text:要顯示的信息字符串;
// Time: 顯示時長,Toast.LENGTH_LONG, Toast.LENGTH_SHORT
```
單擊按鈕,監(jiān)聽器的程序(三種)
- 創(chuàng)建內(nèi)部類 ;
- 主類中實現(xiàn) OnClickListener 接口;
- 匿名內(nèi)部類;
6種常見的布局類型
- 相對
- 絕對
- 線性
- 表格
- 網(wǎng)格
- 幀
Intent跳轉(zhuǎn)及傳遞參數(shù)
-
Activity跳轉(zhuǎn)的程序
Intent intent = new Intent(this, Activity.class); startActivity(intent); -
Activity跳轉(zhuǎn)時傳遞參數(shù)的程序
// Activity01 String data = "Hello Acitvity02"; Intent intent = new Intent(this, Activity02.class); intent.putExtra("extra_data", data); startActivity(intent); // Activity02 Intent intent = getIntent(); String data = intent.getStringExtra("extra_data"); -
startActivity與startActivityForResult的區(qū)別
startActivityForResult可以使用回傳數(shù)據(jù),然后startActivity不可以。 new intent(如上示例代碼);
intent.putExtra, getStringExtra, getIntExtra(如上示例代碼);
-
顯式意圖與隱式意圖
顯示意圖:在 Intent 啟動 Activity 時,需要明確指定激活組件的名稱。
隱式意圖:在 Intent 啟動 Activity 時,沒有明確指定組件名。
SharedPreferences讀寫
-
讀
SharedPreferences sp = context.getSharedPreferences(String name, int mode); // name 表示文件名 // mode 表示文件操作模式: 1. MODE_PRIVATE: 該SharedPreferences中的數(shù)據(jù)只能被 `本` 應用程序 `讀寫`。 2. MODE_APPEND: 該SharedPreferences中的數(shù)據(jù)可以被`追加`。 3. MODE_WORLD_READABLE: 該SharedPreferences中的數(shù)據(jù)可以被 `其它` 應用程序`讀`。 4. MODE_WORLD_WRITEABLE: 該SharedPreferences中的數(shù)據(jù)可以被 `其它` 應用程序`讀寫`。 方法種類: 1. contains 判斷是否包含 2. getAll 獲取全部 3. get(Boolean|Int|Float|Long|String|StringSet) 獲取值 -
寫
SharedPreferences sp = context.getSharedPreferences(String name, int mode); Editor editor = sp.edit(); 獲取此實例對象才可以進行編輯; editor.put(String|StringSet); 存入數(shù)據(jù); editor.remove(); 刪除數(shù)據(jù); editor.clear(); 清空全部數(shù)據(jù); editor.commit(); 提交修改;
SQLite數(shù)據(jù)庫操作怎么做? SQLiteOpenHelper, SQLiteDatabase,Cursor各自的作用、方法
-
SQLiteOpenHelper
作用: 是一個抽象類,該類用于創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫版本更新。
-
方法:
- SQLiteOpenHelper 構(gòu)造方法;
- onCreate 創(chuàng)建數(shù)據(jù)庫時調(diào)用的方法;
- onUpgrade 數(shù)據(jù)庫版本更新時調(diào)用;
- getReadableDatabase 創(chuàng)建或打開一個只讀的數(shù)據(jù)庫;
- getWritableDatabase 創(chuàng)建或打開一個讀寫的數(shù)據(jù)庫;
-
SQLiteDatabase
作用: 是一個數(shù)據(jù)庫訪問類,該類封裝了一系列數(shù)據(jù)庫操作的API。
-
方法:
- insert 添加一條記錄;
- query 查詢數(shù)據(jù);
- rawQuery 執(zhí)行帶占位符的 SQL 查詢;
- update 修改特定查詢;
- delete 刪除表中特定記錄;
- execSQL 執(zhí)行一條帶占位符的 SQL 語句;
- close 關(guān)閉數(shù)據(jù)庫;
-
Cursor
作用: 是一個游標接口,在數(shù)據(jù)庫操作中作為返回值,相當于結(jié)果集 ResultSet。
-
方法:
-
move:
- moveToNext 移動光標到下一行;
- moveToPrevious 移動光標到上一行;
- moveToFirst 移動光標到第一行;
- moveToLast 移動光標到最后一行;
- moveToPosition 移動光標到指定位置;
-
get:
- getInt 獲取指定列的整型值;
- getString 獲取指定列的字符串;
- getColumnIndex 得到指定列索引值;
- getCount 返回 Cursor 中的行數(shù);
- getPostion 返回當前 Cursor 的位置;
- getColumnName 根據(jù)列的索引值獲取列的名稱;
- getColumnNames 獲取 Cursor 所有列的名稱的數(shù)組;
-
SQLite的特點
- 輕量級數(shù)據(jù)庫;
- 遵守ACID關(guān)聯(lián)式的數(shù)據(jù)庫管理系統(tǒng);
- 用文件保存數(shù)據(jù),支持跨平臺;
數(shù)據(jù)庫開發(fā)流程
- 創(chuàng)建數(shù)據(jù)庫;
- 增刪查改數(shù)據(jù);
常用控件怎么用?(EditText, TextView, Button,RadioButton,RadioGroup …….)代碼怎么寫
-
EditText
<EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入您的用戶名" android:textSize="14dp" /> EditText et_name = (EditText) findViewById(R.id.et_name); et_name.getText().toString().trim(); -
TextView
<TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="用戶名: " android:textSize="20dp" /> TextView tv_name = (TextView) findViewById(R.id.tv_name); tv_name.setText("用戶名: SPxiaomin"); -
Button
<Button android:id="@+id/btn_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交用戶信息" /> Button btn_send = (Button) findViewById(R.id.btn_send); -
RadioGroup & RadioButton
<RadioGroup android:id="@+id/radioGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="性別" android:orientation="horizontal"> <RadioButton android:id="@+id/radioMale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="男" /> <RadioButton android:id="@+id/radioFemale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" /> </RadioGroup> RadioButton maleRadio = (RadioButton) findViewById(R.id.radioMale); maleRadio.isChecked();
ListView和Adapter
-
ListView: 一個以列表的形式展示具體數(shù)據(jù)內(nèi)容的控件。
用人話說就是,類似于你手機qq中的聯(lián)系人列表。
-
Adapter: 對 ListView 進行數(shù)據(jù)適配。
簡單說,就是 ListView 只是一個空箱子,Adapter 用來往箱子里面裝數(shù)據(jù)。
Log日志輸出,級別
-
5個級別:
- Verbose:
Log.v(); - Debug:
Log.d(); - Info:
Log.i(); - Warning:
Log.w(); - Error:
Log.e();
- Verbose:
Activity生命周期7個方法
- onCreate(Bundle savedInstanceState):創(chuàng)建時執(zhí)行。
- onStart(): 可見時執(zhí)行。
- onRestart(): 回到前臺,再次可見時執(zhí)行。
- onResume(): 獲取焦點時執(zhí)行。
- onPause(): 失去焦點時執(zhí)行。
- onStop(): 用戶不可見進入后臺時執(zhí)行。
- onDestroy(): 銷毀時執(zhí)行。
Android中數(shù)據(jù)存儲的5種方式
- 文件存儲;
- SharedPreferences;
- SQLite 數(shù)據(jù)庫;
- ContentProvider;
- 網(wǎng)絡存儲;
有序廣播、無序廣播、有序廣播攔截、優(yōu)先級
-
有序廣播
- 同步執(zhí)行;
- 同一時刻只會有一個廣播接受器能夠接受到這條信息,一個接一個的傳送;
- 可以被攔截;
-
無序廣播:
- 異步執(zhí)行;
- 所有監(jiān)聽者幾乎同一時刻收到這條廣播;
- 無法被截斷;
-
有序廣播攔截
在有序廣播中,高優(yōu)先級的廣播接收器先接受到廣播,高優(yōu)先級的廣播接收器可以通過
abortBroadcast()方法終止廣播,進而低優(yōu)先級的廣播接收器就收不到廣播。 -
優(yōu)先級
- 在清單文件中注冊廣播接受者時定義
android:priority="",優(yōu)先級的范圍-1000~1000之間; - 優(yōu)先級相同,先注冊的優(yōu)先;
- 在清單文件中注冊廣播接受者時定義
服務的特點,及服務的啟動
-
服務的特點:
- 與
Activity類似,但是沒有界面; - 即使用戶切換到另一應用程序,服務仍可以在后臺運行,因此經(jīng)常被用來處理一些耗時的程序。
- 與
-
服務的啟動
- start 方式啟動服務: startService、stopService;
- bind 方式啟動服務: bindService、unbindService;
start 方式和 bind 方式的區(qū)別:bind 方式啟動服務的話,服務就可以和調(diào)用者進行方法調(diào)用和數(shù)據(jù)交互。
內(nèi)容提供者,短信備份的例子
書本,p157
Android中的權(quán)限 (讀通訊錄、讀短信、發(fā)短信、寫文件、打電話、聯(lián)網(wǎng)等)
在 AndroidManifest.xml 文件加上相應的權(quán)限配置就可以了
<uses-permission android:name="android.permission.READ_SMS" /> // 讀取短信
Android的安全性
使用沙箱的概念來實現(xiàn)應用程序之間的分離和權(quán)限的限定;
-
應用程序簽名;
- 識別代碼的作者;
- 檢測應用程序是否發(fā)生了改變;
- 在應用程序之間建立信任;
-
應用程序權(quán)限;
權(quán)限在安裝期間通過 manifest 文件由應用程序請求,由用戶授予或不授予。
文件和內(nèi)容提供者權(quán)限。
附加內(nèi)容
- APK、ADT、AVD、ADB 的全稱
APK: android package,Android安裝包;
ADT: android development tool,Android 開發(fā)工具;
AVD: android virtual device,android 虛擬設(shè)備;
ADB: android debug bridge,android 調(diào)試橋;
- Activity 生命周期,點擊Back鍵時,Activity 依次經(jīng)歷了哪幾個事件?點擊 Home 鍵時,Activity 依次經(jīng)歷了哪幾個事件?
點擊 Back 鍵時,onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume;
點擊 Home 鍵時,onPause -> onStop -> onRestart -> onStart -> onResume;
分別舉例說明如何在 Java 代碼和布局 XML 文件中訪問存儲在 strings.xml 文件中的字符串資源?如何實現(xiàn)國際化的應用程序?
示例如下:
```
// strings.xml
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<string name="hello">Hello!</string>
</resources>
// 布局 XML 文件中
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
// Java 代碼中
String string = getString(R.string.hello);
```
由于 Android 采用 XML 文件來管理資源文件,因此 Android 程序國際化只需要為資源文件提供不同語言國家或地區(qū)對應的內(nèi)容即可。
論述
android 平臺的優(yōu)缺點?
優(yōu)點:
1. 開放性(允許任何移動終端廠商加入到 Android 聯(lián)盟中來);
2. 掙脫運營商的束縛(能夠更加方便的接入網(wǎng)絡,運營商的制約減少);
3. 豐富的硬件選擇(廠商眾多);
4. 不受制約的開發(fā)商(app有好的和不好的,血腥、暴力等不在少數(shù));
缺點:
1. 安全和隱私問題嚴重(個人痕跡等泄露嚴重);
2. 缺少標準;
- android vs ios
android 平臺
優(yōu)點:
1. 開發(fā)的優(yōu)點使得其發(fā)展迅速,社區(qū)非常強大;
缺點:
1. 但是也是由于其開放性的原因,劣質(zhì)軟件如木馬軟件等數(shù)量不在少數(shù),用戶隱私被泄露嚴重;
ios 平臺
優(yōu)點
1. 非常好的用戶體驗;
2. 云服務強大,數(shù)據(jù)得以備份,并且具有追蹤設(shè)備功能;
3. app 只能夠到官方市場下載,使得應用安全可靠;
缺點
1. 封閉性帶來的安全保障同時也造成了一定的不方便,比如說收費 app 等;
// 疑惑
ppt 圖片插入,大小設(shè)置;