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

      百恒網絡

      南昌百恒網絡

      Android開發之接收系統broadcast:重啟后喚醒

      百恒網絡 2017-07-01 5903

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

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

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

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

      要登記broadcast receiver,首先要創建它。創建一個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發送給StartupReceiver時,它的onReceive(...)方法會被調用。打開 AndroidManifest.xml配置文件,參照如下代碼登記上StartupReceiver。

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

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

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

      在配置文件中完成聲明后,即使應用并未運行,只要有匹配的broadcast intent發來,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上的運行時系統。自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開發公司-百恒網絡建議大家多試幾次。還是不行的話,那就暫時放棄,等學習到優化通知消息時,就能以其他更方便的辦法來驗證receiver的運行了。)


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

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

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      国产精品合集一区二区三区| 四虎永久在线精品免费一区二区| 99爱在线精品视频网站| 国产精品亚洲精品日韩动图| 久久婷婷五月综合色精品| 国产伦精品一区二区三区视频金莲| 国产99视频精品免视看7| 中文字幕日韩高清| 亚洲精品午夜国产va久久| 一区二区三区四区精品视频| 香蕉在线精品视频在线观看2| 国产日韩精品一区二区三区| 日韩一二三区毛片| 国产精品自在在线午夜出白浆 | 国产精品无码久久综合| 国产A级毛片久久久精品毛片| 午夜亚洲AV日韩AV无码大全 | 国产成人综合日韩精品无码| 日韩在线观看网站| 精品精品国产自在97香蕉| 国产精品一区在线麻豆| 精品一区高潮喷吹在线播放| 91麻豆精品国产片在线观看| 久久精品亚洲综合| 国产成人精品无码播放| 亚洲精品无码久久不卡| 精品亚洲成a人片在线观看| H无码精品3D动漫在线观看| 亚洲A∨精品一区二区三区| 国产精品自在线天天看片| 国产成人精品久久亚洲高清不卡 | 日韩精品福利视频一区二区三区| 久久久久人妻精品一区三寸| 色妞妞www精品视频| 精品国产一区二区三区四区| 亚洲制服丝袜精品久久| 国产日韩精品在线| 国产成人精品怡红院| 国产成人精品高清在线观看99 | 亚洲精品无码你懂的| 亚洲国产成人精品无码区二本|