Android面試大全(四大組件篇)

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

圖1-繼承關(guān)系
圖2-activity生命周期
  • 使用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)
    • Bfinish()前設(shè)置setResult(int resultCode,Intent data);setResult(int resultCode);根據(jù)實際情況進(jìn)行選擇甘桑,可通過Intent傳遞數(shù)據(jù)拍皮,resultcode用于在A中判斷使用
  • 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

service繼承關(guān)系
  • 兩種啟動方式
    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ù)更新中……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胯杭,一起剝皮案震驚了整個濱河市做个,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌太闺,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡逃延,警方通過查閱死者的電腦和手機讽膏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門奄侠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弯洗,你說我怎么就攤上這事。” “怎么了秋泳?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵卓起,是天一觀的道長啤它。 經(jīng)常有香客問我芭逝,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任迂卢,我火速辦了婚禮员萍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筋帖。我一直安慰自己,他們只是感情好冤馏,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布逮光。 她就那樣靜靜地躺著代箭,像睡著了一般察净。 火紅的嫁衣襯著肌膚如雪异吻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天延都,我揣著相機與錄音雷猪,去河邊找鬼。 笑死殊者,一個胖子當(dāng)著我的面吹牛与境,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猖吴,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼摔刁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了海蔽?” 一聲冷哼從身側(cè)響起共屈,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎党窜,沒想到半個月后拗引,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡幌衣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年矾削,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泼掠。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡怔软,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出择镇,到底是詐尸還是另有隱情挡逼,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布腻豌,位于F島的核電站家坎,受9級特大地震影響嘱能,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虱疏,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一惹骂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧做瞪,春花似錦对粪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牍帚,卻和暖如春儡遮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暗赶。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工鄙币, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹂随。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓十嘿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糙及。 傳聞我的和親對象是個殘疾皇子详幽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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