2015-01-31 3 views
3

Вопрос довольно сам пояснительный.Как имитировать finishAffinity в Android?

Я занимаюсь классом, который регистрирует активность пользователя во избежание бездействия, после 2 минут отсутствия активности или при каждом уменьшении времени приложения приложение должно закрыть. Мой код приведен ниже:

public class InActivityTimer extends Activity { 

    public static final long DISCONNECT_TIMEOUT = 2*60*1000; // 2 min = 2 * 60 * 1000 ms 
    public static int ESTADO_ACTIVIDAD=0; //Variable para saber si la actividad está al frente o no. 

    private static Handler disconnectHandler = new Handler(){ 
     public void handleMessage(Message msg) { 
     } 
    }; 

    private Runnable disconnectCallback = new Runnable() { 
     @Override 
     public void run() { 
      // Perform any required operation on disconnect 
      //finish(); 
      finishAffinity(); 
      Intent intent = new Intent(getApplicationContext(),VentanaInactividadCierreAplicacion.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

      //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
      startActivity(intent); 
     } 
    }; 

    public void resetDisconnectTimer(){ 
     disconnectHandler.removeCallbacks(disconnectCallback); 
     disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT); 
    } 

    public void stopDisconnectTimer(){ 
     disconnectHandler.removeCallbacks(disconnectCallback); 
    } 

    @Override 
    public void onUserInteraction(){ 
     resetDisconnectTimer(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     ESTADO_ACTIVIDAD ++; 
     resetDisconnectTimer(); 
     comprobarEstado(); 
    } 

    private void comprobarEstado() { 

     if (ESTADO_ACTIVIDAD == 0){ 
//   Intent startMain = new Intent(getApplicationContext(), SplashScreen.class); 
//   startMain.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
//   startActivity(startMain); 
//   finish(); 
      finishAffinity(); 
      Toast.makeText(getApplicationContext(), "RandomPassGEN cerrado por seguridad", Toast.LENGTH_SHORT).show();} 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     ESTADO_ACTIVIDAD--; 
     stopDisconnectTimer(); 
     comprobarEstado(); 
    } 

/* @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(getBaseContext(),"La aplicación se reiniciará por seguridad", Toast.LENGTH_SHORT).show(); 
     finishAffinity(); 
    }*/ 

} 

Как вы можете видеть, я использую finalaffinty дважды. Как я могу сделать это с помощью этой команды? Я бы хотел этого избежать, потому что для использования finishAffinity() нужны андроиды +4.1

Большое вам спасибо за помощь.

+0

Вы хотите просто удалить все действия из задачи? Выполняются ли ваши действия в задаче другого приложения? –

+0

Нет, это не так. @DavidWasser – Razvi

ответ

1

Чтобы закрыть приложение, выполните следующие действия:

Intent intent = new Intent(this, MyRootActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("exit", true); 
startActivity(intent); 

MyRootActivity должен быть корневой деятельностью вашей задачи (это одна с ACTION = MAIN и КАТЕГОРИЯ = LAUNCHER в манифесте).

В MyRootActivity.onCreate() добавить следующее после super.onCreate():

if (getIntent().hasExtra("exit")) { 
    // User wants to exit, so do that 
    finish(); 
    return; 
} 
... here is the rest of your onCreate() code 

Это будет работать только если MyRootActivity не вызывает finish(), когда он начинает следующую активность в рабочем процессе. Если MyRootActivity действительно вызывает finish(), когда он начинает следующую операцию, вы должны изменить ее так, чтобы она не была. В этом случае вам нужно будет обрабатывать случай, когда пользователь обращается к MyRootActivity в качестве специального случая.

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