Android面試大全(四大組件篇)
Android面試大全(性能優(yōu)化篇)
Android面試大全(異常處理篇)
Android面試大全(開源框架篇)
Android面試大全(網(wǎng)絡(luò)篇)
Android面試大全(java篇)
談?wù)剬ndroid四大組件的認(rèn)識
這都是基本常識
- ** Activity**
- BrocastReceiver
- ContentProvider
- Service
1. Activity
public class Activity
extends ContextThemeWrapper
implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback,View.OnCreateContextMenuListener, ComponentCallbacks2
- 使用activity需要在
AndroidManifest.xml
中注冊
<application
android:name=".application.FunnyApplication"http://注冊項目的Application類
android:allowBackup="true"http://可通過adb backup和adb restore來備份和恢復(fù)應(yīng)用程序數(shù)據(jù),默認(rèn)為true遮咖;
android:icon="@mipmap/ic_launcher"http://app圖標(biāo)
android:label="@string/app_name"http://app名
android:supportsRtl="true"http://是否支持從右到左布局api 17(4.2時出現(xiàn))
android:theme="@style/app_theme">//設(shè)置主題
<activity
android:name=".activity.MainActivity"
android:configChanges="orientation" />//設(shè)置方向
</application>
onCreate(Bundle)
:在此方法中做一些初始化操作斯稳,初始化activity洲鸠、setContentView(int)
加載布局、控件的初始化等(findViewById(int)
)onStart()
:可見不可操作刻撒,顯示界面onResume()
:可見可操作,此時的activity
處于棧頂位置用戶可以愉快的玩耍了onPause()
:可見不可交互揽乱,此時界面沒有獲取焦點(如在activity中彈出dialog隙疚、設(shè)備休眠也可從onresume()
進(jìn)入到onPause()
狀態(tài)),官方建議在這里保存狀態(tài)信息(數(shù)據(jù)),通常用contentprovider
來保存onStop()
:不可見,被覆蓋或最小化onDestroy()
:銷毀前調(diào)用的最后一個方法忙芒,可在此做一些解綁示弓、資源回收等操作onRestart()
:重新返回,下一個調(diào)用的是onStart()
方法
當(dāng)activity被強制回收了呵萨,在被殺死前會調(diào)用onSaveInstanceState(Bundle)方法奏属,可以在此保存一些有用的信息-
獲取返回值操作
Activity:A、B
在A中獲取B中返回的結(jié)果- 在A中跳轉(zhuǎn)方法使用
startActivityForResult(Intent intent, int requestCode)
或startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options)
- 在B中
finish()
前設(shè)置setResult(int resultCode,Intent data);
或setResult(int resultCode);
根據(jù)實際情況進(jìn)行選擇甘桑,可通過Intent傳遞數(shù)據(jù)拍皮,resultcode用于在A中判斷使用
- 在A中跳轉(zhuǎn)方法使用
在A中重寫方法,B返回A時會調(diào)用此方法,接收B中傳遞數(shù)據(jù)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
-
data持久化
- 保存持久化數(shù)據(jù) :SQLite跑杭、SharedPreferences铆帽、File、Content Provider德谅、網(wǎng)絡(luò)
2.BrocastReceiver
在Android中爹橱,Broadcast是一種廣泛運用的在應(yīng)用程序之間傳輸信息的機制。而BroadcastReceiver是對發(fā)送出來的 Broadcast進(jìn)行過濾接受并響應(yīng)的一類組件窄做。
下面將詳細(xì)的闡述如何發(fā)送Broadcast和使用BroadcastReceiver過濾接收的過程:
首先在需要發(fā)送信息的地方愧驱,把要發(fā)送的信息和用于過濾的信息(如Action慰技、Category)裝入一個Intent對象,然后通過調(diào)用 sendOrderBroadcast()或sendStickyBroadcast()方法组砚,把 Intent對象以廣播方式發(fā)送出去吻商。
當(dāng)Intent發(fā)送以后,所有已經(jīng)注冊的BroadcastReceiver會檢查注冊時的IntentFilter是否與發(fā)送的Intent相匹配糟红,若匹配則就會調(diào)用BroadcastReceiver的onReceive()方法艾帐。所以當(dāng)我們定義一個BroadcastReceiver的時候,都需要實現(xiàn)onReceive()方法盆偿。
注冊BroadcastReceiver有兩種方式:
靜態(tài)注冊:在AndroidManifest.xml
中用標(biāo)簽注冊柒爸,并在標(biāo)簽內(nèi)用標(biāo)簽設(shè)置過濾器。
<receiver android:name="myRecevice"> //繼承BroadcastReceiver事扭,重寫onReceiver方法
<intent-filter>
<action android:name="com.dragon.net"></action> //使用過濾器捎稚,接收指定action廣播
</intent-filter>
</receiver>
動態(tài)注冊:
一般:在onStart中注冊,onStop中取消unregisterReceiver
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(String); //為BroadcastReceiver指定action求橄,使之用于接收同action的廣播
registerReceiver(BroadcastReceiver,intentFilter);//注冊
Intent intent = new Intent(actionString);//指定廣播Action:
intent.putExtra("msg", "我通過廣播發(fā)送消息了");//通過Intent攜帶消息
Context.sendBroadcast(intent );//發(fā)送廣播消息
3. Service
- 兩種啟動方式
bindService今野、startService兩種
startService這種service可以無限地運行下去,必須調(diào)用stopSelf()方法或者其他組件調(diào)用stopService()方法來停止它谈撒。當(dāng)service被停止時腥泥,系統(tǒng)會銷毀它。
bindService:被綁定的service是當(dāng)其他組件(一個客戶)調(diào)用bindService()來創(chuàng)建的啃匿。
客戶可以通過一個IBinder接口和service進(jìn)行通信蛔外。
客戶可以通過 unbindService()方法來關(guān)閉這種連接。
一個service可以同時和多個客戶綁定溯乒,當(dāng)多個客戶都解除綁定之后夹厌,系統(tǒng)會銷毀service。生命周期隨它綁定的組件而定 - 生命周期
在下圖中裆悄,左側(cè)的為startService方式啟動Service的生命周期矛纹,右側(cè)為bindService方式啟動Service時的生命周期
兩種生命周期
如果service是被開啟的,那么它的活動生命周期和整個生命周期一同結(jié)束光稼。
如果service是被綁定的或南,它們它的活動生命周期是在onUnbind()方法返回后結(jié)束。
4.ContentProvider
ContentProvider:為存儲和獲取數(shù)據(jù)提供統(tǒng)一的接口艾君〔晒唬可以在不同的應(yīng)用程序之間共享數(shù)據(jù)。Android已經(jīng)為常見的一些數(shù)據(jù)提供了默認(rèn)的ContentProvider
1冰垄、ContentProvider使用表的形式來組織數(shù)據(jù)
無論數(shù)據(jù)的來源是什么蹬癌,ContentProvider都會認(rèn)為是一種表,然后把數(shù)據(jù)組織成表格
2、ContentProvider提供的方法
query:查詢
insert:插入
update:更新
delete:刪除
getType:得到數(shù)據(jù)類型
onCreate:創(chuàng)建數(shù)據(jù)時調(diào)用的回調(diào)函數(shù)
3逝薪、每個ContentProvider都有一個公共的URI隅要,這個URI用于表示這個ContentProvider所提供的數(shù)據(jù)。Android所提供的ContentProvider都存放在android.provider包當(dāng)中
- ContentProvider的內(nèi)部原理
自定義一個ContentProvider董济,來實現(xiàn)內(nèi)部原理
步驟:
1步清、定義一個CONTENT_URI常量(里面的字符串必須是唯一)
Public static final Uri CONTENT_URI = Uri.parse("content://com.WangWeiDa.MyContentprovider");
如果有子表,URI為:
Public static final Uri CONTENT_URI = Uri.parse("content://com.WangWeiDa.MyContentProvider/users");
2感局、定義一個類尼啡,繼承ContentProvider
Public class MyContentProvider extends ContentProvider
3暂衡、實現(xiàn)ContentProvider的所有方法(query询微、insert、update狂巢、delete、getType藻雌、onCreate)
正在持續(xù)更新中……