Basically, it's clear to distinguish implicit and explicit intent
Explicit Intents have specified a component (via setComponent(ComponentName) or setClass(Context, Class)), which provides the exact class to be run. Often these will not include any other information, simply being a way for an application to launch various internal activities it has as the user interacts with the application.
Implicit Intents have not specified a component; instead, they must include enough information for the system to determine which of the available components is best to run for that intent.
But I'm confused by Google's introduced on https://developer.android.com/about/versions/oreo/background.html#broadcasts
For example, ACTION_PACKAGE_REPLACED is an implicit broadcast, since it is sent to all registered listeners, letting them know that some package on the device was replaced. However, ACTION_MY_PACKAGE_REPLACED is not an implicit broadcast, since it is sent only to the app whose package was replaced, no matter how many other apps have registered listeners for that broadcast.
Why ACTION_MY_PACKAGE_REPLACED is not an implicit broadcast?
Intentis created to target the component registered for that broadcast, and it carries theACTION_MY_PACKAGE_REPLACEDaction. ExplicitIntents can also have actions.Intentis created to target the component registered for it. Then, that action is added to the explicitIntent.