Intents and PendingIntents are mechanisms in Android that allow communication between application components. Intents are used to start activities, services, and other components, and can be explicit or implicit. PendingIntents are tokens that allow other applications to use an application's permissions to execute code, and are required for applications like notifications and alarms to perform actions in the background. There are two types of intents - explicit intents specify the target component while implicit intents do not.