Как имитировать 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();
}*/
}
Как видите, я использую finishaffinty дважды. Как я мог сделать это без этой команды? Я хотел бы избежать этого, потому что для использования finishAffinity() нужен Android +4.1
Спасибо большое за вашу помощь.
1 ответ
Чтобы закрыть приложение, сделайте следующее:
Intent intent = new Intent(this, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("exit", true);
startActivity(intent);
MyRootActivity
должен быть корневым действием вашей задачи (это с ACTION=MAIN и CATEGORY=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
как особый случай.