Intent.FLAG_ACTIVITY_CLEAR_TOP вызывает всплывающую активность, даже если приложение находится в фоновом режиме? - PullRequest
2 голосов
/ 03 октября 2011

Я использую Android 2.2.У меня есть приложение, которое выходит из системы (в результате чего приложение возвращается на страницу входа в систему) после определенного периода бездействия.Я использую Intent.FLAG_ACTIVITY_CLEAR_TOP для моего Intent.Тем не менее, я замечаю, что, когда мое приложение находится в фоновом режиме и неактивно в течение определенного периода времени, страница входа в систему внезапно всплывает, и мое приложение выходит на передний план.Я ожидаю, что страница входа останется фоновой.Этого не происходит, когда я не использую какой-либо флаг для своих намерений.Если я не использую какой-либо флажок для своего намерения, страница входа в систему спокойно запускается в фоновом режиме.Но без использования Intent.FLAG_ACTIVITY_CLEAR_TOP я не смогу очистить свой стек истории.

Почему это происходит?Как я могу спокойно начать задание в фоновом режиме?

Ниже приведен фрагмент моего кода:

@Override //Inside a class extending AsyncTask
protected void onPostExecute(String result)
{
    ((GlobalApplication)getApplicationContext()).setIsLogin(false); //user is not logged in anymore
    Intent intent = new Intent(this, LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}

Ниже приведен фрагмент кода, который я сделал из предложения Ларса:

@Override //Inside a class extending AsyncTask
protected void onPostExecute(String result)
{
    ((GlobalApplication)getApplicationContext()).setIsLogin(false); //user is not logged in anymore
    Intent intent = new Intent(this, LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    if(((GlobalApplication)getApplicationContext()).isOnBackground())
        ((GlobalApplication)getApplicationContext()).setPendingIntent(intent);
    else
        startActivity(intent);
}

@Override //overrides android.app.Activity. inside the current Activity
protected void onResume()
{
    super.onResume();
    Intent pendingIntent = ((GlobalApplication)getApplicationContext()).getPendingIntent();
    if(pendingIntent != null)
        startActivity(pendingIntent);
}

1 Ответ

1 голос
/ 03 октября 2011

Вы пытались проверить, вошли ли вы в раздел onResume ваших действий, вместо того, чтобы вызывать LoginActivity, когда таймер выключается (что, я полагаю, вы делаете)?: Для пояснения вы выходите из системы по истечении заданного периода времени (или когда происходит событие).В этот момент вы запускаете AsyncTask, который создает намерение для вашего loginActivity, добавляет к нему флаг и запускает его.И ваша проблема в том, что вы не хотите, чтобы функция loginActivity выходила на передний план, если у пользователя нет открытого приложения.Это точно?

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

РЕДАКТИРОВАТЬ: фрагмент кода из моего комментария (теперь правильно отформатирован):

@Override    
     protected void onResume() {   
         super.onResume();   
         if (!getLoggedIn())   
         {  
              startActivity(new Intent(this, LoginActivity.class));   
              finish();   
         }   
     }
...