Android學習筆記(三)

來源:互聯網
上載者:User

標籤:dma   對象   廣播   cas   sms   tracking   nts   bsp   使用者   

ContentProvider簡單介紹

  ContentProvider是不同應用程式之間進行資料交換的標準API,當一個應用程式須要把自己的資料暴露給其它程式使用時。該應用程式便可通過提供ContentProvider來實現,其它應用程式就可通過ContentResolver來操作ContentProvider暴露的資料。假設某一應用程式通過ContentProvider暴露了自己的資料操作介面,則無論該應用程式是否啟動。其它應用程式都能夠通過該介面來操作該應用程式的內部資料。包含添加、刪除、改動、查詢資料。

android:authorities屬性

   定義好的ContentProvider類必須在AndroidManifest.xml裡聲明後才幹使用,聲明中必須加入授權屬性

android:authorities。相當於為該ContentProvider指定網域名稱,Content uri中content://authority/optionalPath/optionalId的authority部分便是android:authorities屬性指定的值。

屬性值定義的方法為包名+ “.”+ 該ContentProvider的名稱。

Service本身存在的兩個問題

1. Service不會專門啟動一條單獨的進程,Service與它所在應用處於同一個進程中。

2. Service不是一條新的線程。因此不應該在Service中直接處理耗時的操作。耗時的操作應該開啟一個新的線程來處理。

處理耗時任務的問題

假設就開發這須要在Service模組中處理耗時任務,通常是在Service中另外啟動一條新線程來處理,但不能在其它應用程式組件中啟動子線程來處理,由於Activity可能會被使用者退出、BroadcastReceiver的生命週期非常短。非常有可能出現子線程還沒有結束。Activity已經被使用者退出,或者BroadcastReceiver已經結束,出現空線程的情況。

IntentService簡單介紹

  IntentService可以彌補Service本身的兩個缺陷: IntentService會使用隊列來管理請求的Intent,每當client代碼通過Intent請求啟動IntentService時。IntentService會將該Intent增加隊列中,然後開啟一條新的worker線程來處理該Intent,對於非同步startService()請求。IntentService會按次序依次處理隊列中的Intent,該線程保證同一時刻僅僅處理一個Intent。

因為IntentService使用新的worker線程處理Intent請求,因此IntentService不會堵塞主線程,所以IntentService自己便能處理耗時的任務。

靜態代碼塊

   即類中不包括不論什麼方法體的靜態代碼塊,其格式一般為static{…}。這樣的靜態代碼塊僅僅在類被載入時運行,並且僅僅運行一次。

靜態代碼塊一般用來運行類屬性的初始化。

getResources().getStringArray(…)作用

getResources().getStringArray(R.array.setting)是擷取應用程式中數組資源的方法。即假設要使用應用程式中定義的數組資源,須要使用getResources().getStringArray(R.array.*),其返回值為一個數組。

TelephonyManager服務類的getXxx()方法舉例

  1.TelephonyManager.getDeviceId()                      //擷取裝置的編號

  2.TelephonyManager.getDeviceSoftwareVersion()           //擷取系統平台的版本號碼

  3.TelephonyManager.getNetworkOperator()                //擷取網路電訊廠商代號

  4.TelephonyManager.getNetworkOperatorName()           //擷取網路電訊廠商名稱

  5.TelephonyManager.getPhoneType()                     //擷取行動電話通訊類型

  6.TelephonyManager.getCellLocation()                    //擷取裝置所在位置

  7.TelephonyManager.getSimCountryIso()                  //擷取SIM卡的國別

  8.TelephonyManager.getSimSerialNumber()                //擷取SIM卡序號

  9.TelephonyManager.getSimState()                       //擷取SIM卡狀態

  返回值的類型都是String類型。

通話狀態監聽器PhoneStateListener簡單介紹

PhoneStateListener是通話狀態監聽器,定義該監聽器時必須實現onCallStateChanged(intstate, String number)方法。通話狀態的主要靜態常量: int CALL_STATE_IDLE  //空暇狀態,沒有不論什麼活動    int CALL_STATE_OFFHOOK  //摘機狀態。至少有個電話活動,該活動或是撥打或是通話,或者是on hold。而且沒有電話是ringing or waiting   intCALL_STATE_RINGING //來電狀態。電話鈴聲響起的那段時間或正在通話又來新電,新來電話不得不等待的那段時間。

擷取簡訊管理器的方法

  SmsManager sManager= SmsManager.getDefault();     //由此方法擷取應用程式的SmsManager

PendingIntent對象簡單介紹

   PendingIntent對象是對Intent的封裝,一般通過調用PendingIntent的getActivity()、getService()、getBroadcastReceiver()靜態方法來擷取PendingIntent對象。與Intent對象不同的是。PendingIntent一般會傳給其它應用組件,從而由其它應用程式來運行PendingIntent所封裝的Intent。

BroadcastReceiver簡單介紹

  BroadcastReceiver屬於系統級的監聽器,擁有自己的進程,僅僅要存在與之匹配的Intent被廣播出來。BroadcastReceiver就能被激發。

當被激發後,會自己主動觸發它的onReceive()方法,onReceive()方法運行完畢後。BroadcastReceiver的執行個體便會被銷毀。與Activity組件不同的是,當系統通過Intent啟動指定的Activity組件時,假設沒有找到合適的Activity組件,會導致程式異常終止。但系統通過Intent激發BroadcastReceiver時,假設找不到合適的BroadcastReceiver組件,應用不會有不論什麼問題。此外,不能在onReceive()中運行耗時的操作,能夠考慮通過Intent啟動一個Service來完畢該操作。但不能使用新線程完畢耗時的操作。由於BroadcastReceiver本身的生命週期非常短,可能出現子線程還沒結束,BroadcastReceiver就已經退出了。

Android學習筆記(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.