2016-09-08 84 views
0

首先我想給這裏的代碼,但代碼的方式來長,它可以在這裏意圖:將活動直接綁定到沒有服務的BroadcastReceiver?

http://www.c-sharpcorner.com/article/creating-and-scheduling-alarms-in-android/

的代碼的文章中找到不創建服務。

按我理解,BroadcastReceiver被用來服務於基於其對應服務的活性(通過意圖)。

通常我們會宣佈這樣的:

Intent serviceIntent = new Intent(MainActivity.this, CustomeService.class); 
    startService(serviceIntent); 
    registerReceiver(mReceiver, mIntentFilter); 

其中mReceiver將是這樣的:

private BroadcastReceiver mReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

     } 
} 

但有什麼東西在例如困惑我在AlarmManager類,我通過鏈接共享:

intent = new Intent(this, MyBroadcastReceiver.class); 
      pendingIntent = PendingIntent.getBroadcast( 
        this.getApplicationContext(), 280192, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
      alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + (i * 1000), 10000 
        , pendingIntent); 

這是混淆了我行是這樣的:

intent = new Intent(this, MyBroadcastReceiver.class);

這個MyBroadcastReceiver.class的類型是BroadcastReceiver本身,而不是Service.

所以哪來的服務MyBroadcastReceiver.class從那時候收到廣播?

是否BroadcastReceiver以某種方式創建自己的服務?

+0

嗯,你究竟想達到什麼目的? (我知道我重複這個問題) – pskink

+0

我的意思是這個MyBroadcastReceiver從哪裏接收廣播的服務?我很抱歉,如果不夠清楚,這是一個24小時內學習機器人對於我來說休息是脆弱的。我的頭很累,現在很困惑,如果還不清楚,請告訴我。 –

回答

1

這個MyBroadcastReceiver.class的類型是廣播接收器本身,而不是服務

正確的。它與PendingIntent. getBroadcast(), not getService()`一起使用。

那麼這個MyBroadcastReceiver.class接收到的服務在哪裏廣播?

很少的廣播是由Service發送的,儘管這肯定是可能的。在這種情況下,當鬧鐘時間到來時,廣播正在從系統進程發送,作爲發送PendingIntent的一部分。

BroadcastReceiver以某種方式創建自己的服務?

我不確定這裏的「創建」是什麼意思。A BroadcastReceiver可能會將其工作委託給Service。這是AlarmManager的常見模式:讓警報觸發WakefulBroadcastReceiver,然後代表將工作委託給IntentService。在這種情況下,間接原因源於AlarmManagerWakeLocks協同工作的方式。

+0

非常感謝您的解釋,我希望我可以多次提升。 –