2016-07-19 1 views
1

У меня есть проект в режиме отладки, и я поставил точку прерывания в Activity1. , Однако, когда выполнение проекта останавливается в этой точке прерывания, мне нужно выяснить, какой из видов деятельности или класса называется Activity1.Как найти вызывающий класс для Activity в Android Studio?

Я пробовал посмотреть Android studio documentation и не нашел, как.

+0

AFAIK, нет никакого способа сделать это с точки зрения Android SDK.Вы можете сделать что-то самостоятельно для своего «намерения», чтобы помочь отличить их, например, добавить в «Intent» дополнительную информацию о том, кто назвал 'startActivity()'. Затем вы можете посмотреть на «Intent», который 'Activity1' получает через' getIntent() ', чтобы определить, какая из них была запущена. – CommonsWare

ответ

0

Если вы хотите узнать только о действиях, которые вы просматриваете, вы можете легко сделать это, просмотрев Logcat. Откройте окно LogCat (AndroidMonitor -> LogCat)

Искать ActivityManager

Вы wull получить приведенные ниже брикеты

07-19 15: 42: 04,064 606-632/system_process I/ActivityManager: Отображается com.android.dialer /. DialtactsActivity: + 674ms

В этом случае я запустил приложение телефона.

Но если вы просто хотите поместить часть кода, которая выполняется, только если эта активность запущена из определенного места, тогда вы можете сделать что-то вроде этого.

Поместите этот код при запуске операции.

Intent intent = new Intent(context, Activity1.class); 
intent.putExtra("ENABLE_XXX_CODE", true); 

В деятельности, где вы хотите поместить включить некоторую логику для этого конкретного потока:

boolean isEnabled = savedInstanceState.getString("ENABLE_XXX_CODE"); 
if(isEnabled) 
{ 
//Your logic goes here. 
} 
0

Вы не можете это сделать по умолчанию, и вот почему:

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 является и должен быть отдельным объектом :-)

Смежные вопросы