20189208 2018-2019-2 《移動平臺開發實踐》第12周學習總結

教材學習內容總結

47章

  1. 服務的兩種形式:
    啓動的:組件啓動了服務,就是啓動的,服務可在後臺無限期運行;
    綁定的:應用程序組件綁定到服務綁定的服務像是客戶端-服務器中的服務器;
public class TestService extends Service {
    @Override
    public IBinder onBind(Intent arg0) {        
        return null;
    }
}
  1. 回調方法
public class TestService extends Service {

    @Override
    public void onCreate() {        
        super.onCreate();
    }

    @Override
    public void onDestroy() {        
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {        
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent arg0) {        
        return null;
    }

}

4 service元素的屬性html

<service android:enabled=["true" | "false"]
//是否這個service能被系統實例化,若是能則爲true,不然爲false。默認爲true。
   android:exported=["true" | "false"]    
   //是否其它應用組件能調用這個service或同它交互,能爲true,默認值依賴因而否包含過濾器。
   android:icon="drawable resource"    
   //服務呈現的圖標。
   android:isolatedProcess=["true" | "false"]    
   //若是設置爲true,這個服務將運行在專門的進程中
   android:label="string resource"   
   //這個服務給用戶顯示的名稱。
   android:name="string"    
   //實現這個service的Service子類名稱。
   android:permission="string"   
   //爲了啓動這個service或綁定到它一個實體必需要有的權限的名稱。
   android:process="string"  
   //服務將要運行的進程名稱。
/>

48章廣播接收器

  1. 廣播操做系統、程序、用戶的意圖,相似監聽事件的Java監聽器
動做 說明
ACTION_TIME_TICK 當前時間修改,每分鐘發送
ACTION_TIME_CHANGED 時間已經設置了
ACTION_TIME_ZONE_CHANGED 時區更改了
ACTION_BOOT_COMPLETED 系統完成了重啓
ACTION_PACKAGE_ADDED 設備上安裝了新的應用程序包
ACTION_PACKAGE_CHANGED 應用程序已經修改了
ACTION_PACKAGE_REMOVED 應用程序包已經刪除
ACTION_PACKAGE_RESTARTED 用戶從新啓動一個包
ACTION_PACKAGE_DATA_CLEARED 用戶清理了一個包的數據
ACTION_UID_REMOVED 用戶uid刪除了
ACTION_BATTERY_CHANGED 充電狀態、級別、或其餘細節已經修改
ACTION_POWER_CONNECTED 外部電源已經連接到設備
ACTION_POWER_DISCONNECTED 外部電源已經從設備斷開
ACTION_SHUTDOWN 設備準備關閉

49章鬧鐘服務

  1. 鬧鐘是內建服務,可經過編程隨後調用操做,一次或重複。
  • 發佈的時間儘量與指定時間
  • 傳遞給set的工做能夠推遲但不能夠提早
  1. 方法:set(int type,long startTime,PendingIntent pi):一次性鬧鐘
  • setRepeating(int type,long startTime,long intervalTime,PendingIntent pi): 重複性鬧鐘,和3有區別,3鬧鐘間隔時間不固定
  • setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi): 重複性鬧鐘,時間不固定
  • cancel(PendingIntent pi):取消AlarmManager的定時服務
  • getNextAlarmClock():獲得下一個鬧鐘,返回值AlarmManager.AlarmClockInfo
  • setAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation) 和set方法相似,這個鬧鐘運行在系統處於低電模式時有效
  • setExact(int type, long triggerAtMillis, PendingIntent operation): 在規定的時間精確的執行鬧鐘,比set方法設置的精度更高
  • setTime(long millis):設置系統牆上的時間
  • setTimeZone(String timeZone):設置系統持續的默認時區
  • setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation): 設置一個鬧鐘在給定的時間窗觸發。相似於set,該方法容許應用程序精確地控制操做系統調 整鬧鐘觸發時間的程度。
  1. 幾種常量:
  • AlarmManager.RTC,硬件鬧鐘,不喚醒手機(也多是其它設備)休眠;當手機休眠時不發射鬧鐘。
  • AlarmManager.RTC_WAKEUP,硬件鬧鐘,當鬧鐘發躰時喚醒手機休眠;
  • AlarmManager.ELAPSED_REALTIME,真實時間流逝鬧鐘,不喚醒手機休眠;當手機休眠時不發射鬧鐘。
  • AlarmManager.ELAPSED_REALTIME_WAKEUP,真實時間流逝鬧鐘,當鬧鐘發躰時喚醒手機休眠;

50章內容提供者

內容提供者是用來封裝和其餘應用程序共享的數據的一個Android組件,提供訪問其餘應用程序中的數據。android

  1. 若是數據須要共享:
  • 建立內容提供者拓展android.content.ContentProvider類
  • 這個類提供CRUD方法
  • 必須用provider元素在應用程序清單中 下注冊
  • 本程序可訪問,若爲其它應用程序提供數據必須聲明讀寫許可
  • 使用permission元素聲明讀許可,不能與已有的名稱衝突
  • 內容提供者中的數據必須由URI來引用,消費者必須制定這個URI
  • 使用內容提供者的數據不須要運行提供者的程序
  • 默認的內容提供者
//定義內容提供者
public class MyApplication extends  ContentProvider {
}
//查詢URI
<prefix>://<authority>/<data_type>/<id>

URI說明:編程

  • prefix
    前綴:一直被設置爲content://
  • authority
    受權:指定內容提供者的名稱,例如聯繫人,瀏覽器等。第三方的內容提供者能夠是全名,如:cn.programmer.statusprovider
  • data_type
    數據類型:這個代表這個特殊的內容提供者中的數據的類型。例如:你要經過內容提供者Contacts來獲取全部的通信錄,數據路徑是people,那麼URI將是下面這樣:content://contacts/people
  • id
    這個指定特定的請求記錄。例如:你在內容提供者Contacts中查找聯繫人的ID號爲5,那麼URI看起來是這樣:content://contacts/people/5
  1. ContentProvider類的方法:
  • onCreate():當提供者被啓動時調用。
  • query():該方法從客戶端接受請求。結果是返回指針(Cursor)對象。
  • insert():該方法向內容提供者插入新的記錄。delete():該方法從內容提供者中刪除已存在的記錄。
  • update():該方法更新內容提供者中已存在的記錄。getType():該方法爲給定的URI返回元數據類型。
  1. 消費內容提供者

教材學習中的問題和解決過程

  • 問題1:服務是否是在主線程運行?
  • 問題1解決方案:
    service是運行在主線程上的,而不是運行在另外一個線程中,若是你想在service中處理很佔時間的操做,你必須在service中開線程,這樣能夠下降activity沒有響應的風險。

代碼託管


學習進度條

|            | 代碼行數(新增/累積)| 博客量(新增/累積)|學習時間(新增/累積)|重要成長|
| --------   | :----------------:|:----------------:|:---------------:  |:-----:|
| 目標        | 5000行            |   30篇           | 400小時            |       |
| 第一週      |       -----         |       -----       |        -----          |       |
| 第二週      | 180/180           |  2/3            | 18/18             |       |
| 第三週      | 429/609          |  1/4            | 24/42             |       |
| 第四周      | 588/1197        |  2/6            | 30/72             |       |
| 第五週      | 548/1745        |  2/6            | 20/92             |       |
| 第六週      | 15934/17679  |  2/8            | 20/112             |       |
| 第九周      | 18690/39576  |  1/12            | 21/173             |       |
| 第十週      | 18690/39576  |  2/14            | 21/194             |       |
| 第十一週      | 17636/57212  |  1/15            |17/211             |       |
| 第十二週      | 17636/57212  |  1/15            |17/211             |       |瀏覽器

參考資料

相關文章
相關標籤/搜索