Sobes.tech
Middle

Kodėl naudojamas PendingIntent vietoj įprasto Intent?

sobes.tech AI

Atsakymas iš AI

PendingIntent leidžia perduoti ketinimą (Intent) kitai programai, kad ji galėtų jį įvykdyti jūsų programos vardu vėliau ir net jei jūsų programa jau baigėsi.

Pagrindinės priežastys naudoti PendingIntent:

  • Pranešimai: aktyvumo ar paslaugos paleidimas paspaudus pranešimą, net jei programa tuo metu nėra aktyvi.
  • Darbalaukio widget'ai: veiksmų paleidimas programoje sąveikaujant su widget'u.
  • Pabudimai ir atidėtos užduotys: programos kodo vykdymas nustatytu laiku ar pagal tam tikrą sąlygą naudojant AlarmManager.
  • SMS ir kiti transliacijų gavėjai: veiksmo vykdymas programoje gaunant transliacinį ketinimą.

Įprastas Intent vykdomas nedelsiant ir jūsų programos kontekste. PendingIntent yra Intent apvalkalas, kuris leidžia kitai programai vykdyti šį Intent su tokiais pačiais leidimais, tarsi jį vykdytų jūsų programa.

Sukuriant PendingIntent, reikia pasirinkti komponento tipą, kuris bus paleistas: veiklą (getActivity), paslaugą (getService) arba transliacijos gavėją (getBroadcast). Taip pat nurodomi žymekliai, apibrėžiantys PendingIntent elgesį, pvz., kaip tvarkyti esamus ketinimus (FLAG_UPDATE_CURRENT, FLAG_CANCEL_CURRENT).

Pavyzdys, kaip sukurti PendingIntent veiklos paleidimui:

// Sukuriame ketinimą paleisti MainActivity
Intent intent = new Intent(context, MainActivity.class);
// Apvyniojame ketinimą į PendingIntent
// requestCode naudojamas identifikuoti pending intent
// FLAG_UPDATE_CURRENT: jei toks pending intent jau egzistuoja, atnaujinti jį naujais duomenimis
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0,
    intent,
    PendingIntent.FLAG_UPDATE_CURRENT
);