詳談廣闊的Android手機(jī)系統(tǒng)
下面文章著重進(jìn)行介紹下什么是Android手機(jī)系統(tǒng),在熟知Android手機(jī)系統(tǒng)之前,先讓我們熟知下什么是Android?所謂的Android:Android 包括一個被 Android 系統(tǒng)中各種不同組件所使用的 C/C++ 庫集。
正如前面提到的,AppWidgetProviderInfo類中的配置值是不變的,因?yàn)閡pdateTimeMillis值就在這個類中。任何有AppWidgetProviderInfo的Widget實(shí)例,只要設(shè)置了這個值,Widget就會根據(jù)其頻率更新。
沒有辦法修改它,因?yàn)檫@個應(yīng)用程序應(yīng)該讓用戶配置Widget中圖片刷新的頻率,因此你必須自動動手實(shí)現(xiàn)。Android手機(jī)系統(tǒng)是最常用的更新機(jī)制,因?yàn)樗С种貜?fù)通知,這些通知是將被觸發(fā)的簡單的PendingIntent對象。
你可能會想你可以創(chuàng)建一個具有AppWidgetManager.ACTION_APPWIDGET_UPDATE的Intent對象,然后給特定的Widget標(biāo)識符設(shè)置額外的值。接著你就可以通過調(diào)用AlarmManager的setRepeating()方法,采用調(diào)度機(jī)制反復(fù)地更新,遺憾的是,這種做法行不通。
Android手機(jī)系統(tǒng)反復(fù)使用Intents匹配行為和方案值,那些“額外的”值是不會拿去對比的。實(shí)際上,解決方案非常簡單:首先為你的Widget定義一個方案,然后用它定義唯一的Intent實(shí)例。下面的代碼片段顯示如何實(shí)現(xiàn)這個目標(biāo):
在ImagesWidgetConfiguration Activity中你會發(fā)現(xiàn)前面的代碼,manifest文件顯示塊處理這個特定的scheme。你也需要在AppWidgetProvider接口的onDeleted()方法內(nèi)停止重復(fù)的警報。最后,當(dāng)手機(jī)重啟后,更新調(diào)度也必須重啟。
在AppWidgetProvider的onReceive()方法內(nèi)提供了一個簡單的解決方案,首先,檢查更新行為,如果它是一個更新。確保它不包含scheme值,如果它不是更新,那么調(diào)度AlarmManager 的PendingIntent不會觸發(fā)這個行為,在這種情況下,檢查每個Widget標(biāo)識符是否有一個配置選項(xiàng)值。
如果沒有,那么在配置Widget之前,你知道這個更新行為被接收到。但如果選項(xiàng)值有效,那么你知道可以調(diào)度PendingIntent,在onReceive()方法中你可以看到完整的邏輯實(shí)現(xiàn)。這個方案允許多個Widget同時顯示,如圖2所示。更新也可以以不同的頻率進(jìn)行,每個顯示的圖片是從圖片集中隨機(jī)選擇的。
【編輯推薦】