Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想当用户在android中单击后退按钮时结束整个应用程序_Android - Fatal编程技术网

我想当用户在android中单击后退按钮时结束整个应用程序

我想当用户在android中单击后退按钮时结束整个应用程序,android,Android,我想在安卓系统中,当用户点击“后退”按钮时,结束整个应用程序。现在它再次转到上一个打开的活动。 我也尝试重写onBackPressed(),但它不起作用 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { onBackPressed(); } return super.onKeyDown(keyCode, eve

我想在安卓系统中,当用户点击“后退”按钮时,结束整个应用程序。现在它再次转到上一个打开的活动。 我也尝试重写onBackPressed(),但它不起作用

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();
    }
       return super.onKeyDown(keyCode, event);
}
enter code here
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    return;
}

在这种情况下,您需要完成活动,因此将使用finish()方法关闭当前活动。但是,您还应该在前面的每个活动中编写finish(),您可以在其中调用intent(启动另一个活动)。希望这能说明问题

在这种情况下,您需要完成活动,因此将使用finish()方法关闭当前活动。但是,您还应该在前面的每个活动中编写finish(),您可以在其中调用intent(启动另一个活动)。希望这能说明问题

试试这个,从一个将充当根目录的活动启动应用程序

public class Root extends Activity {

     public void onCreate() {
         super.onCreate();
         handleIntent();
      }

      public void onNewIntent(Intent intent) {
        setIntent(intent);
        handleIntent();
      }

     private void handleIntent() {
         boolean end = getIntent.getBooleanExtra("End");
         if (end) {
            finish();
         } else {
            Intent intent = new Intent(this, MyRealFirstActivity.class); // where this is the class that you want the user to see when they launch your app.
            startActivity(intent);
         }
      }



      public void onResume() {
        super.onResume();
        finish();
      }
}
然后在希望“后退”按钮结束应用程序的活动中,执行以下操作:

public class LastActivity extends Activity {

    public void onBackPressed() {
        Intent intent = new Intent(this, Root.class);
        intent.putExtra("End", true);
        intent.addFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }
}

这样,在启动应用程序和点击后退按钮之间启动的所有活动都将为您完成()。这将彻底清理应用程序的历史记录,然后退出。

试试这个,从一个充当根用户的活动启动应用程序

public class Root extends Activity {

     public void onCreate() {
         super.onCreate();
         handleIntent();
      }

      public void onNewIntent(Intent intent) {
        setIntent(intent);
        handleIntent();
      }

     private void handleIntent() {
         boolean end = getIntent.getBooleanExtra("End");
         if (end) {
            finish();
         } else {
            Intent intent = new Intent(this, MyRealFirstActivity.class); // where this is the class that you want the user to see when they launch your app.
            startActivity(intent);
         }
      }



      public void onResume() {
        super.onResume();
        finish();
      }
}
 public void onBackPressed() {

         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_HOME);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         this.finish();
         startActivity(intent);
       }
然后在希望“后退”按钮结束应用程序的活动中,执行以下操作:

public class LastActivity extends Activity {

    public void onBackPressed() {
        Intent intent = new Intent(this, Root.class);
        intent.putExtra("End", true);
        intent.addFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }
}

这样,在启动应用程序和点击后退按钮之间启动的所有活动都将为您完成()。这将从应用程序的开始到结束,然后退出。

这里我们有两种方法
完成或杀死
按下后退按钮的应用程序

 public void onBackPressed() {

         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_HOME);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         this.finish();
         startActivity(intent);
       }
  • 使用
    finish()
    关闭或完成android屏幕上的当前活动

    例如:您有两个活动,即AB。您将使用intent从A活动转到B活动,现在前台活动是B,您要返回并杀死B活动并转到A活动使用
    finish()
    onclick backbutton。如果您的应用程序启动了一个
    活动,则会关闭应用程序。请参阅下面的代码

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    finish();
    }
    return super.onKeyDown(keyCode, event);
    }
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    // Kills & force closes the app 
    android.os.Process.killProcess(android.os.Process.myPid());
    }
    return super.onKeyDown(keyCode, event);
    }
    
  • 使用
    android.os.Process.killProcess(android.os.Process.myPid())这将终止应用程序,即强制关闭应用程序并转到主屏幕。请参阅下面的代码

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    finish();
    }
    return super.onKeyDown(keyCode, event);
    }
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    // Kills & force closes the app 
    android.os.Process.killProcess(android.os.Process.myPid());
    }
    return super.onKeyDown(keyCode, event);
    }
    

  • 在这里,我们有两种方法来完成或杀死
    按下后退按钮的应用程序

  • 使用
    finish()
    关闭或完成android屏幕上的当前活动

    例如:您有两个活动,即AB。您将使用intent从A活动转到B活动,现在前台活动是B,您要返回并杀死B活动并转到A活动使用
    finish()
    onclick backbutton。如果您的应用程序启动了一个
    活动,则会关闭应用程序。请参阅下面的代码

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    finish();
    }
    return super.onKeyDown(keyCode, event);
    }
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    // Kills & force closes the app 
    android.os.Process.killProcess(android.os.Process.myPid());
    }
    return super.onKeyDown(keyCode, event);
    }
    
  • 使用
    android.os.Process.killProcess(android.os.Process.myPid())这将终止应用程序,即强制关闭应用程序并转到主屏幕。请参阅下面的代码

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    finish();
    }
    return super.onKeyDown(keyCode, event);
    }
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    // Kills & force closes the app 
    android.os.Process.killProcess(android.os.Process.myPid());
    }
    return super.onKeyDown(keyCode, event);
    }
    

  • 我在我的应用程序中是这样做的:ActivityA是第一个启动的;它依次启动ActivityB。在ActivityB中,我可能会遇到一个错误,在这种情况下,我希望返回activityA,或者所有操作都可以正确完成,在这种情况下,我希望完全“完成”应用程序

    在活动A中:

    public class ActivityA extends Activity {
    ...
        private final static int REQUEST_ACT_B = 1;
    ...
        private void startChild() {
            startActivityForResult(new Intent(this, ActivityB.class), REQUEST_ACT_B;
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(requestCode == REQUEST_TASK && resultCode == ActivityB.RESULT_OK) {
                this.finish();
            }
        }
    }
    
    然后在ActivityB中:

    public class ActivityB extends Activity {
    ...
        public final static int RESULT_OK = 1;
        public final static int RESULT_ERROR = 2;
    ...
        private void finishWithError() {
            setResult(RESULT_ERROR);
            finish();
        }
    
        private void finishSuccessfully() {
            setResult(RESULT_OK);
        }
    }
    

    本质上,ActivityA启动ActivityB并期望返回结果。如果它收到返回的结果“OK”,那么它会自动关闭,用户也不知道:应用程序已经完成了。如果收到结果“错误”,则ActivityA将保持打开状态。

    以下是我在应用程序中的操作方式:ActivityA是第一个启动的;它依次启动ActivityB。在ActivityB中,我可能会遇到一个错误,在这种情况下,我希望返回activityA,或者所有操作都可以正确完成,在这种情况下,我希望完全“完成”应用程序

    在活动A中:

    public class ActivityA extends Activity {
    ...
        private final static int REQUEST_ACT_B = 1;
    ...
        private void startChild() {
            startActivityForResult(new Intent(this, ActivityB.class), REQUEST_ACT_B;
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(requestCode == REQUEST_TASK && resultCode == ActivityB.RESULT_OK) {
                this.finish();
            }
        }
    }
    
    然后在ActivityB中:

    public class ActivityB extends Activity {
    ...
        public final static int RESULT_OK = 1;
        public final static int RESULT_ERROR = 2;
    ...
        private void finishWithError() {
            setResult(RESULT_ERROR);
            finish();
        }
    
        private void finishSuccessfully() {
            setResult(RESULT_OK);
        }
    }
    

    本质上,ActivityA启动ActivityB并期望返回结果。如果它收到返回的结果“OK”,那么它会自动关闭,用户也不知道:应用程序已经完成了。如果收到结果“错误”,则ActivityA将保持打开状态。

    当您说您覆盖了它时。。。您是否意识到您的实现什么都不做?就像您刚刚调用了父实现一样。。。它只是回到了之前的活动。如果你想结束应用程序,当你说你超越它。。。您是否意识到您的实现什么都不做?就像您刚刚调用了父实现一样。。。它只是回到了之前的活动。如果您想结束应用程序,这是有意义的,但是我认为当活动返回前台时,总是调用onResume。想象一下,当你接到一个电话时,你正在根活动中。当调用结束时,您的根活动被带回到前台,onResume被调用,活动结束。不是很好,是吗?但按照同样的逻辑,onResume已经被称为。。。所以活动应该已经完成了。恢复不会发生,它将发生在紧接着启动的活动上。这种方式是有意义的,但是我认为当活动返回前台时,总是调用onResume。想象一下,当你接到一个电话时,你正在根活动中。当调用结束时,您的根活动被带回到前台,onResume被调用,活动结束。不是很好,是吗?但按照同样的逻辑,onResume已经被称为。。。所以活动应该已经完成了。恢复不会发生,而是在立即开始的活动中