Почему активность Android не останавливается после вызова finish()?

У меня есть действие под названием MyProgressDialog, которое содержит ProgressDialog. Это действие ScreenProgressDialog вызывается в основном действии намерениями:

       if(msg.what == SET_PROGRESS){

            intent.putExtra("action", "set");
            ...

            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

            startActivity(intent);
        }
        else if(msg.what == SHOW_PROGRESS){             


            intent.putExtra("action", "show");
            ...

            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

            startActivity(intent);              
        }
        else if(msg.what == HIDE_PROGRESS){

            intent.putExtra("action", "hide");

            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

            startActivity(intent);

        }

Вот активность MyProgressDialog:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.e("screenPD", "spd created");

    extras = getIntent().getExtras();



    pd = new ProgressDialog(this);

    ...setting the pd...        

    pd.show();  

    Log.e("screenPD", "spd shown");
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    setIntent(intent);

    int newTitle = intent.getExtras().getInt("title");

    if (intent.getExtras().getString("action").equals("set")){
        pd.set methods...
        pd.show();

        Log.e("DialogSET", "DialogSET "+intent.getExtras().getInt("progress"));
    }
    else if (intent.getExtras().getString("action").equals("show")){
        pd.set methods...
        pd.show();

        Log.e("DialogSHOW", "DialogSHOW "+progress);

    }
    else if (intent.getExtras().getString("action").equals("hide")){
        pd.dismiss();
        this.finish();
        Log.e("DialogHIDE", "DialogHIDE");
        return;
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.e("screenPD", "destroyed");     
}

А вот ЛогКэт:

DialogHIDE(2615): DialogHIDE
screenPD(2615): spd created
screenPD(2615): spd shown
screenPD(2615): destroyed

Итак, начинается третье намерение, вызывает метод finish(); возвращаться; и запускается метод Onreate, который отображает новый ProgressDialog. Вызывается onDestroy, но ProgressDialog не прячется с экрана. После метода finish() активность должна быть закрыта. В чем проблема? Благодарю вас!


person Alex    schedule 14.07.2012    source источник


Ответы (2)


Нет ошибки. метод, вызывающий finish(), завершится до завершения, и после его завершения элемент управления вернется к Android

person Blackbelt    schedule 14.07.2012
comment
Но после вызова finish() не следует вызывать метод Activitiy onCreate, на мой взгляд. - person Alex; 14.07.2012
comment
Если вы начинаете новое действие, то после завершения метода будет вызываться onCreate нового действия. - person Blackbelt; 14.07.2012
comment
Прежде чем он уничтожит себя, вызывает метод onCreate после завершения(). Почему не onDestroy? - person Alex; 14.07.2012

После метода startactivity вы вызываете finish(), чтобы завершить текущую активность. После запуска этого нового действия завершите предыдущее действие.

person Hardik Joshi    schedule 14.07.2012