| Intent比較簡(jiǎn)單,類(lèi)似消息,發(fā)送給別的activity,別的activity會(huì )立即執行 我主要說(shuō)說(shuō)什么是PendingIntent以及它的執行過(guò)程 以alarm service為例: 1. activity請求一個(gè)alarm一般這樣來(lái)做: # //創(chuàng )建一個(gè)PendingIntent # Intent intent = new Intent(ALARM_ALERT_ACTION); # intent.putExtra(ID, id); # intent.putExtra(TIME, atTimeInMillis); # PendingIntent sender = PendingIntent.getBroadcast( # context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); # //獲得AlarmMnager并注冊一個(gè)新鬧鈴, # //一次性鬧鈴的設置 # # AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); # am.set(AlarmManager.POWER_OFF_WAKEUP, atTimeInMillis, sender); 2. AlarmManager.set調用AlarmManagerService.set 3. AlarmManagerService.set的核心代碼如下: ![]() 我們可以看到它就是把PendingIntent保存起來(lái)而已 4. alarm manager service會(huì )定時(shí)查看是否有alarm到期了,如果到期了做相應處理。 5. AlarmThread會(huì )調用 alarm.operation.send(mContext, 0, mBackgroundIntent.putExtra( Intent.EXTRA_ALARM_COUNT, alarm.count), mResultReceiver, mHandler); 也就是通過(guò)PendingIntent.send執行intent操作,alarm這個(gè)就會(huì )發(fā)送ALARM_ALERT_ACTION的broadcast。 補充說(shuō)明: 1. PendingIntent重要特點(diǎn)是異步處理。 2. 另外有一個(gè)要說(shuō)明的是PendingIntent.onFinished,它可以作為PendingIntent.send的一個(gè)參數, 我們知道PendingIntent.send一般是在service中執行,這個(gè)調用的send后,回調onFished類(lèi)的onSendFinished,所以onSendFinished一般也是在service中執行的 |
聯(lián)系客服