2014-01-03 3 views
1

Что происходит, когда finish() метод вызывается в onStop() метод?Calling отделка() в OnStop()

ли это вызывает ANR: означает, что она называет

OnPause() -> OnStop() -> отделка() -> OnPause() ....

или заканчивает свою деятельность: означает, что она называет непосредственно

OnDestroy()

На самом деле, я хочу закончить своей деятельности, когда она полностью невидимой.

EDIT:

Смотрите этот сценарий, я запускаю активность B, чья макет высоты и ширина меньше, чем активность А, поэтому активность А частично виден и когда я нажимаю дома активность кнопки A становится полностью незаметной . На этом этапе я хочу закрыть активность A, так что не call onRestart().

Заранее благодарен.

+1

Так почему вы не добавляете код в OnPause? –

+0

Система будет вызывать методDestroy(), а Activity заканчивается, как обычно ... –

+0

@PankajKumar, если у Activity есть Диалог? и что, если финишировать Активность в таких случаях? –

ответ

2

Он заканчивает деятельность и вызывается onDestroy(). Если вы хотите завершить свою деятельность, когда она невидима, тогда вы должны позвонить по номеру finish() в onStop().

+0

Необходимы некоторые ссылки @PratikGandhi – Susomrof

+0

http://developer.android.com/reference/android/app/Activity.html#finish http://stackoverflow.com/questions/2590947/about-finish-in-android – PratikGandhi

+0

есть нет слова относительно: call finish() in onStop(). – Susomrof

0

Это будет лучший способ в вашем случае назвать finish();

Благодаря

+0

может быть, это сработает. , но я не хочу закрывать все свое приложение. – Susomrof

+1

В методе end() Android только закрывается текущая активность, из которой вызывается метод finish(). Если вы хотите закрыть все приложение, есть другой способ. То же самое для System.exit(). Он закроет текущую активность. Если мой ответ поможет вам, пожалуйста, поддержите это. Благодарю. :) –

+0

Нет, нет! Вы никогда не должны называть 'System.exit()'. Для этого нет оснований. Это плохой совет. Вызов 'System.exit()' завершает весь процесс (включая все ваши действия, службы и т. Д.), А не только эту активность. И Android будет думать, что ваш процесс разбился. –

0

в соответствии со сценарием, поддерживать один флаг в MainActivity о том, что другой деятельности запущен или нет? и убедитесь сами, чтобы закончить MainActivity или не основано на этом флаге ...

это может помочь ...

public class MyActivity extends Activity { 
    private boolean isSecondActivityLaunched; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     isSecondActivityLaunched = false; 
    } 

    public void onClick(View view) { 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
     isSecondActivityLaunched = true; 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if(!isSecondActivityLaunched) { 
      finish(); 
     } 
    } 
} 
Смежные вопросы