Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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,当我按下设备的后退按钮时,我想进入主屏幕。我正在使用此代码 public void onBackPressed() { this.finish(); return; } 您可以尝试以下方法: public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ this.finish (); } return tr

当我按下设备的后退按钮时,我想进入主屏幕。我正在使用此代码

public void onBackPressed() {
   this.finish();
   return;
}
您可以尝试以下方法:

public boolean onKeyDown(int keyCode, KeyEvent event) 
{       
  if(keyCode==KeyEvent.KEYCODE_BACK){
        this.finish ();
      }
    return true;
}

您想覆盖OnkeyDown&finish活动吗

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
       this.finish();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

好的,要启动设备的主屏幕,请在
onKeyDown()中使用此代码

如果你想关闭你的应用程序,我想你要么通过
finish()
以某种方式(某种标准方式)关闭你的所有活动,要么使用

android.os.Process.killProcess(android.os.Process.myPid())

(一些丑陋的方式…!)

按后退键将有效地为您调用
finish()
。不需要将BACK键设为陷阱

我假设您的问题是,当您按BACK键时,它只是返回到应用程序中的上一个
活动

如果是这种情况,则在应用程序中启动新的
活动时,使所有活动“自行终止”

startActivity(new Intent(this, MyNewActivity.class));
finish();
如果您这样做,则当您按BACK键时,将不会返回任何
活动
,它将始终返回主屏幕。

您应该覆盖finish()

然后像这样调用此方法:

@Override
    public void onBackPressed() {
     this.finish();
    }

当您调用newacitivity时,请在
startActivity
之后调用
finish()
,以便关闭上一个acitivity

然后使用

@Override
    public void onBackPressed() {
        super.onBackPressed();
        this.finish();
    }

简单的方法是,当您移动到下一个活动时,只需完成当前活动

public void onBackPressed() {
    Intent intent = new Intent(this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    this.startActivity(intent);
    this.finish();
}
只需在
启动活动()
后执行
finish()
,然后在“任何活动”的背面按,您只需调用
finish()
即可退出应用程序,因为堆栈中没有所有其他活动。

您可以尝试此操作

@Override
public void onBackPressed() {
        Intent startMain = new Intent(Intent.ACTION_MAIN);      
        startMain.addCategory(Intent.CATEGORY_HOME);                        
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);          
        startActivity(startMain); 
  }

您可以从任何位置关闭应用程序以调用此类型的意图:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

这是从任何地方关闭应用程序的最佳方式,在任何单击事件上,您需要使用标志启动意图,以清除实际活动顶部的活动

public void onBackPressed() {
    Intent intent = new Intent(this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    this.startActivity(intent);
    this.finish();
}

引用官方的话

标记\u活动\u清除\u顶部

如果已设置,则正在启动的活动已在中运行 当前任务,而不是启动该任务的新实例 活动,其上的所有其他活动都将关闭,并且 此意图将作为一个整体传递给(现在位于顶部)旧活动 新的意图

标记活动\u清除任务

如果在传递给Context.startActivity()的意图中设置,则此标志将 使将与活动关联的任何现有任务 在活动开始之前,必须清除。就是活动, 成为其他空任务的新根,以及任何旧根 活动结束了。这只能与 标记\u活动\u新任务

标记活动/否历史记录

如果设置,则新活动不会保留在历史堆栈中。一旦 用户离开它,活动就完成了。今年五月 也可以使用noHistory属性设置

标记活动和新任务

如果设置,此活动将成为此服务器上新任务的开始 历史堆栈


残酷的方式

您在使用此代码时面临的问题是什么?请不要向他人推荐此代码。这真的不是Android应该如何工作。为什么,请解释一下。我喜欢这样,我只是不想让背部做任何事情,除了这个。这根本不是一个好主意!请看第一个问题的答案:您正在启动主屏幕,并要求它作为新任务启动。系统将忽略您的标志,因为主屏幕始终在运行。更重要的是,我们希望清理当前任务的活动堆栈,而不是跳转到主屏幕。第二种方法也不好,你在做操作系统应该做的事情。调用finish()就足够了,决定是否终止进程是操作系统的任务。不管怎么说,你们自己也提到过。@Vikram Bodicherla-在这里,我们不知道应用程序中有多少活动被打开。所以我不能只为finish()重新编译,而kill进程的另一种方式是,只需看看android Home key实现代码,它也会做同样的事情……这样做并没有取得任何效果。删除这段代码将产生完全相同的效果!对你是对的,但是onBackPressed是不推荐使用的…我也经历过有时候onBackPressed不被调用。所以对我来说,戴上钥匙是个更好的主意。但是,默认情况下,如果您按下“后退”按钮,它将引导您进入上一屏幕。“但是,默认情况下,如果您按下“后退”按钮,它将引导您进入上一屏幕”:系统执行此操作的方式是在活动上调用finish()。这也是你正在做的。这应该是公认的答案。对meThis来说,它就像一个符咒,听起来很有道理。它只会让另一个活动出现在堆栈上。要返回,必须在意图中设置一个标志。FLAG_ACTIVITY_CLEAR_TOP我认为在这种情况下,最好使用FLAG_ACTIVITY_CLEAR_TOP
public void onBackPressed() {
    Intent intent = new Intent(this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    this.startActivity(intent);
    this.finish();
}
@Override
public void onBackPressed()
{

                Intent intCloseApp = new Intent(Intent.ACTION_MAIN);
                intCloseApp.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intCloseApp.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                intCloseApp.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                intCloseApp.addCategory(Intent.CATEGORY_HOME);
                intCloseApp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intCloseApp);
  }
public void onBackPressed() {
 System.exit(1);
   return;
}