干熟妇在线视频午夜剧场一级A级|99成人香视频日本两性激情视频|久久 午夜福利无码精品人妻一区|热久久超碰精品精品少妇一区二区|五月天综合在线国产一区免费视频|亚洲成人中心热re久久99|亚洲国产怡红院丁香五月综合h|玖玖九久久久午夜射精视频

十二年專注于品牌網站建設 十余年專注于網站建設_小程序開發(fā)_APP開發(fā),低調、敢創(chuàng)新、有情懷!
南昌百恒網絡微信公眾號 掃一掃關注
小程序
tel-icon全國服務熱線:400-680-9298,0791-88117053
掃一掃關注百恒網絡微信公眾號
掃一掃打開百恒網絡微信小程序

百恒網絡

南昌百恒網絡

Android開發(fā)之接收系統(tǒng)broadcast:重啟后喚醒

百恒網絡 2017-07-01 5577

在南昌APP開發(fā)中,相信很多技術人員都知道PhotoGallery,PhotoGallery應用的后臺定時器雖然可以正常工作,但還不夠完美。如果用戶重啟了設備,定時器就會失效。

設備重啟后,那些持續(xù)運行的應用通常也需要重啟。通過監(jiān)聽帶有BOOT_COMPLETED操作的broadcast intent,可獲知設備是否已完成啟動。只要打開設備,系統(tǒng)就會發(fā)送一個BOOT_COMPLETEDbroadcast intent。要想監(jiān)聽它,可以創(chuàng)建并登記一個standalone broadcast receiver。

standalone receiver是一個在manifest配置文件中聲明的broadcast receiver。即便應用進程已消亡,standalone receiver也可以被激活。(稍后還會學習到可以同fragment或activity的生命周期綁定的dynamic receiver。)

與服務和activity一樣,broadcast receiver必須在系統(tǒng)中登記后才能發(fā)揮作用。如果不登記,系統(tǒng)就不知道該向哪里發(fā)送intent。自然,broadcast receiver的onReceive(...)方法也就得不到預定的調用了。

要登記broadcast receiver,首先要創(chuàng)建它。創(chuàng)建一個StartupReceiver新類,繼承android.content.BroadcastReceiver類,代碼如下所示。

第一個broadcast receiver(StartupReceiver.java)

public class StartupReceiver extends BroadcastReceiver{

private static final String TAG = "StartupReceiver";

@Override

public void onReceive(Context context, Intent intent) {

Log.i(TAG, "Received broadcast intent: " + intent.getAction());

}

}

與服務和activity一樣,broadcast receiver是接收intent的組件。當有intent發(fā)送給StartupReceiver時,它的onReceive(...)方法會被調用。打開 AndroidManifest.xml配置文件,參照如下代碼登記上StartupReceiver。

在manifest文件中添加receiver(AndroidManifest.xml)

在manifest文件中添加receiver(AndroidManifest.xml)

登記響應隱式intent的standalone receiver和登記服務或activity差不多。我們使用receiver標簽并在其中包含相應的intent-filter。StartupReceiver會監(jiān)聽BOOT_COMPLETED操作,而該操作也需要配置使用權限。因此,還需要添加一個相應的uses-permission標簽。

在配置文件中完成聲明后,即使應用并未運行,只要有匹配的broadcast intent發(fā)來,broadcast receiver就會醒來接收。一收到intent,broadcast receiver的onReceive(Context, Intent)方法即開始運行,隨后會被銷毀(如下圖所示)。

接收BOOT_COMPLETED

設備重啟后,StartupReceiver的onReceive(...)方法會被調用嗎?現在就來驗證。首先,運行更新版PhotoGallery應用。

然后,關閉設備。如果是物理設備,直接按電源鍵關機。如果是模擬器,最簡單的方法是直接退出模擬器應用。

打開設備。如果是物理設備,直接按電源鍵開機。如果是模擬器,要么重新運行應用,要么使用AVD Manager啟動應用,但要保證使用的是剛關掉的那個模擬器。

現在,選擇Tools → Android → Android Device Monitor菜單項打開Android Device Monitor。(KitKat之前,Android Device Monitor常被稱為Dalvik Debug Monitor Server或DDMS。Dalvik是Android上的運行時系統(tǒng)。自KitKat開始,Google又引入了ART(Android Runtime)。到了Lollipop,就只剩下ART可用了。雖然現在已改名為Android Device Monitor,但舊的名字仍時有耳聞。)

點擊Android Device Monitor的Devices選項頁中的設備。(如果看不到設備列表,請嘗試插拔USB設備或重啟模擬器。)

在Android Device Monitor窗口中,以Received broadcast intent關鍵字搜索LogCat輸出(如下圖所示)。

搜索LogCat輸出

可以在LogCat中看到表明receiver運行的日志。但如果在設備標簽頁查看設備,則可能看不到任何PhotoGallery進程。這是因為進程在運行broadcast receiver之后,就隨即消亡了。

(使用Logcat輸出測試receiver的運行不一定總是成功,尤其是在模擬器上。按照上述步驟操作,如果看不到log日志,南昌APP開發(fā)公司-百恒網絡建議大家多試幾次。還是不行的話,那就暫時放棄,等學習到優(yōu)化通知消息時,就能以其他更方便的辦法來驗證receiver的運行了。)


400-680-9298,0791-88117053
掃一掃關注百恒網絡微信公眾號
掃一掃打開百恒網絡小程序

歡迎您的光顧,我們將竭誠為您服務×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務 售后服務
 
售后服務 售后服務
 
備案專線 備案專線
 
×