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

Android面試大全(四大組件篇)
Android面試大全(性能優(yōu)化篇)
Android面試大全(異常處理篇)
Android面試大全(開源框架篇)
Android面試大全(網(wǎng)絡(luò)篇)
Android面試大全(java篇)


談?wù)剬ndroid四大組件的認識

這都是基本常識

  • ** 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ù),默認為true;
        android:icon="@mipmap/ic_launcher"http://app圖標
        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()進入到 onPause()狀態(tài)),官方建議在這里保存狀態(tài)信息(數(shù)據(jù)),通常用contentprovider來保存

  • onStop():不可見,被覆蓋或最小化

  • onDestroy():銷毀前調(diào)用的最后一個方法,可在此做一些解綁、資源回收等操作

  • onRestart():重新返回,下一個調(diào)用的是onStart()方法
    當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ù)實際情況進行選擇,可通過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進行過濾接受并響應(yīng)的一類組件。

下面將詳細的闡述如何發(fā)送Broadcast和使用BroadcastReceiver過濾接收的過程:

首先在需要發(fā)送信息的地方,把要發(fā)送的信息和用于過濾的信息(如Action、Category)裝入一個Intent對象,然后通過調(diào)用 sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent對象以廣播方式發(fā)送出去。

當Intent發(fā)送以后,所有已經(jīng)注冊的BroadcastReceiver會檢查注冊時的IntentFilter是否與發(fā)送的Intent相匹配,若匹配則就會調(diào)用BroadcastReceiver的onReceive()方法。所以當我們定義一個BroadcastReceiver的時候,都需要實現(xiàn)onReceive()方法。

注冊BroadcastReceiver有兩種方式:

靜態(tài)注冊:在AndroidManifest.xml中用標簽注冊,并在標簽內(nèi)用標簽設(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()方法來停止它。當service被停止時,系統(tǒng)會銷毀它。
    bindService:被綁定的service是當其他組件(一個客戶)調(diào)用bindService()來創(chuàng)建的。
    客戶可以通過一個IBinder接口和service進行通信。
    客戶可以通過 unbindService()方法來關(guān)閉這種連接。
    一個service可以同時和多個客戶綁定,當多個客戶都解除綁定之后,系統(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ù)提供了默認的ContentProvider
 1、ContentProvider使用表的形式來組織數(shù)據(jù)
   無論數(shù)據(jù)的來源是什么,ContentProvider都會認為是一種表,然后把數(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包當中

  • 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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容