2016-08-11 4 views
0

Есть ли способ узнать, вызван ли onresume активности, потому что кнопка «назад» или если вызвана, потому что приложение-приложение было в фоновом режиме? Мне нужно регистрировать эти разные действия:/ Это сценарий: У меня 4 активности A-B-C-D; Мне нужно, чтобы войти в навигацию между деятельностью и я не хочу, чтобы войти в onresume, вызванного после приложения из фона :)Запишите, почему активность возобновляется.

ответ

1

Из операции A, когда вы начнете работу B/C/D, используйте и идентификатор и запустите действие для результата.

Например:

int ActivityBID = 1; 
Intent i = new Intent(this, ActivityB.class); 
startActivityForResult(i, ActivityBID); 

В вашей деятельности B перекручивания onBackPressed:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(); 
    intent.putExtra("activity","B") 
    setResult(RESULT_OK, intent);   
    finish(); 
} 

И поддержку на активность A:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == ActivityBID) { 
     if(resultCode == RESULT_OK){ 
      String stredittext=data.getStringExtra("activity"); 
     }  
    } 
} 

Примечание: Внутренний если и переменная не нужна, потому что вы уже знаете, из какой деятельности вы пришли, но, я думаю, y ou может захотеть передать некоторые данные в этом возвращении, поэтому я уйду.

Edit Image иллюстрировать ActivityForResult

Imagem

+0

Таким образом, я только записываю журнал, если нажимает на событие назад? Например: A-B-C-B с этим методом, я напишу только B, если пользователь закроет приложение без возврата в A? – aeroxr1

+0

Таким образом, вы можете войти в 'onActivityResult', поэтому код будет отправлен, если у объекта есть ActivityResult, когда вы закрываете APP, этого не происходит. Вы можете создавать другие переменные, такие как ActivityBID, чтобы идентифицировать witch Activity, из которых они получены. –

+0

Но в вашем коде вызывается setresult, только если пользователь нажимает кнопку «Назад»? – aeroxr1

0

Вы можете, например, отменить onBackPressed() обратного вызова

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    /* add your log here */ 
} 

Сбор журнала из onResume() плюс один (если есть), исходящий от onBackPressed(), тогда вы можете обнаружить различные сценарии.

+0

У меня есть 4 вида деятельности A-B-C-D; Мне нужно регистрировать навигацию между действиями, и я не хочу регистрировать onresume, вызванный обратным вызовом приложения из фона :) – aeroxr1

1

Когда Activity паузе onPause() называется. В onPause() введите имя Activity, которое приостанавливается в глобальную переменную static.

Когда возобновляется Activity, вызывается onResume(). В onResume проверьте, содержит ли глобальная переменная static имя этого Activity. Если это так, вы можете опустить журналы, потому что этот Activity был просто приостановлен/возобновлен.

+0

У этого способа есть небольшая проблема. Если навигация A-B-A-C, вы будете писать только A-B-C. – aeroxr1

+1

№ При возвращении в A из B вызывается 'B.onPause()' (будет писать «B» в глобальное), тогда вызывается 'A.Resume()' (увидит, что глобальное не является «A ", поэтому он будет записывать" A "). Вы на самом деле пробовали? –

+0

Завтра я попробую, однако кажется правильным :) – aeroxr1

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