Вы не можете это сделать по умолчанию, и вот почему:
Android стремится к слабосвязанному жизненному циклу приложения, а это означает, что каждый Activity
, Service
и BroadcastReceiver
живет сами по себе. Их можно запустить с помощью Intent
, который отправляется с Context
в системную архитектуру и затем запускает новый компонент. Таким образом, вы не увидите источник Intent
в точке stacktrace break-point, а также некоторые общие системные вызовы.
Чтобы увидеть, что вызвало Activity
, вам нужно будет добавить дополнительные данные для вызова Intent
. Вы делаете это так:
intent.putExtra("SOME_KEY", someValue);
А потом в onCreate()
вы читаете это так:
if(savedInstanceState != null) {
String source = savedInstanceState.getString("SOME_KEY");
}
Если отправитель указано значение источника, вы будете иметь его здесь :-)
В качестве примечания, вы, как правило, не хотите знать, что запустило Activity
. Единственным реальным случаем, когда использовался вышеприведенный код, является ситуация, когда вы хотите, чтобы некоторые параметры передавались в Activity
для его настройки. Кроме того, каждый Activity
является и должен быть отдельным объектом :-)
AFAIK, нет никакого способа сделать это с точки зрения Android SDK.Вы можете сделать что-то самостоятельно для своего «намерения», чтобы помочь отличить их, например, добавить в «Intent» дополнительную информацию о том, кто назвал 'startActivity()'. Затем вы можете посмотреть на «Intent», который 'Activity1' получает через' getIntent() ', чтобы определить, какая из них была запущена. – CommonsWare