android - Android中如何模仿finishAffinity?

标签 android android-activity affinity

这个问题不言自明。

我正在做一个注册用户 Activity 的类(class),以避免闲置 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

非常感谢您的帮助。

最佳答案

要关闭您的应用程序,请执行以下操作:

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

MyRootActivity 应该是您任务的根 Activity (这是 list 中带有 ACTION=MAIN 和 CATEGORY=LAUNCHER 的 Activity )。

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 在您的工作流程中启动下一个 Activity 时没有调用 finish() 时,这才会起作用。如果 MyRootActivity 在启动下一个 Activity 时确实调用了 finish(),您应该更改它以便它不会调用。在这种情况下,您需要将用户返回到 MyRootActivity 的情况作为一种特殊情况进行处理。

关于android - Android中如何模仿finishAffinity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257138/

相关文章:

android - Eclipse 'Loading data for Android 4.4.2' 一直

android - 如何上升到需要使用额外数据启动的父 Activity?

linux - 更改默认 CPU 关联性

android - 如何操作apk内存?

android - 删除表在 sqlite 中不起作用

java - 如何在android中制作一个没有控件的相机应用程序,以便屏幕上只显示镜头的 View ?

android - 无法完成 Activity

linux - 在状态 D 中杀死 linux 进程

c++ - 用于检测 APIC id 的代码为不同的逻辑处理器返回相同的 id

android - rails Devise http 身份验证移动