Android Studio finish()方法的使用与解决app点击“返回”(直接退出)

在这里,我们将用到finish(),简单介绍一下它的使用:

finish()官方解析:Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().“当你打开的Activity已经执行完成并且需要被关闭的时候可以调用这个方法,当你按返回的时候,它将返回到当前Activity的发起者。”
(不过这一段我不是很理解,我还是相信自己的实践吧。)

一、问题的提出

2019年十二月,我遇到了一个问题。在我做一个android app的时候,我有A B C 三个界面,其中A为主界面,预设两种情况:

①从A跳转(intent)到B 然后从 B跳转到A。
点击返回键的结果是:A→B,也就是说点击“返回”又从主界面跳转到B了,显然这样的用户体验非常糟糕。
②从A跳转(intent)到B 然后从B跳转到C。
点击返回的结果是:C→B→A,然而我要当需求是“点击返回,直接从C跳转到A”。结果显然,这不符合产品需求。
为此,我用了finish()函数来解决这个问题。
效果举例:
在C中添加finish()之后,点击“返回”,会直接回到主界面。
这样讲可能很难理解,举个例子吧:
在主界面A 点击“竹海明珠”进入 界面B


点击左上角的自定义的back按钮,会回到主界面。
但是在主界面再次点击 竹海明珠,又再次点击手机系统自带的返回按钮后,界面再次回到主界面。
这时候在主界面上,你点击返回按钮,不是退出APP回到桌面了,而是回到了竹海明珠界面。

二、activity多次回跳问题的解决

为了解决这个问题,可以在你跳转界面的Intent中下面加一个finish函数。
如:
(1)先讲一下**“问题二**”我是在主界面中加了跳转到“竹海明珠”的intent:

zhuH.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  Intent intent_zh = new Intent(MainActivity.this,zhuhai.class);
  startActivity(intent_zh);
  finish();
 }
 });
 这时候,在“竹海明珠“界面中点击“返回(系统自带)”按钮的时候,APP不会再返回到主界面,而是会直接退出。

(2)显然这不能解决activity多次回跳的问题。
那么利用finish()的原理——“它将返回到当前Activity的发起者”,我们应当将finish()加在跳转到左上角自定义的back按钮的代码中:
zhuhaimingzhu.java中:

 //控制返回按钮
 back = findViewById(R.id.back);
 back.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  Intent intent = new Intent(zhuhai.this,MainActivity.class);
  startActivity(intent);
  finish();

这样,它就会直接回到主界面了。
于此同时问题二也解决了,直接将问题二中的finish()给注释掉就好了,其它activity也是同样的操作。

问题产生的思路:
为什么我会在“竹海明珠”以及同级别下的activity中加finish()呢?
这是因为我有一个Activity多次回跳的问题没有解决,同时还有一个问题是,在我于主界面中点击返回按钮后,会直接退出app,这样的用户体验非常不好,为了保持体验的一致性,我索性将二级activity(竹海明珠、洪崖丹井等等)全部设置finish(),这样的话,只要在二级及以上页面中,只要点击了返回按钮就会直接退出APP,但用户可以在我自定义的左上角的back按钮返回activity界面。但,这舒适无奈之举,这样的用户体验效果确实不好。。。

三、点击返回按钮不退出app

那么如何解决,点击返回按钮不直接退出app呢?
设计思路
1.点击两次返回按钮才退出app
2.点击返回按钮回到桌面但是不退出app,使app在后台运行

第一种:点击两次按钮退出app

设计:
①重写onBackPressed方法
onBackPressed() 捕获后退键按钮back的信息
②currentTimeMills 返回毫秒级别的系统时间
③放在oncreate方法下

private static final int TIME_EXIT=2000;
 private long mBackPressed;

 @Override
 public void onBackPressed(){     //onBackPressed() 捕获后退键按钮back的信息
 if(mBackPressed+TIME_EXIT>System.currentTimeMillis()){ //currentTimeMillis,返回毫秒级别的系统时间
  super.onBackPressed();
  return;
 }else{
  Toast.makeText(this,"再点击一次返回退出程序", Toast.LENGTH_SHORT
  ).show();
  mBackPressed=System.currentTimeMillis();
 }
 }

第二种:单击回到桌面,APP在后台运行

 单击回到桌面,app仍在后台运行
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {

 if (keyCode == KeyEvent.KEYCODE_BACK) {
  Intent home = new Intent(Intent.ACTION_MAIN);
  home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  home.addCategory(Intent.CATEGORY_HOME);
  startActivity(home);
  return true;
 }
 return super.onKeyDown(keyCode, event);
 }

总结

到此这篇关于Android Studio finish()方法的使用与解决app点击“返回”(直接退出)的文章就介绍到这了,更多相关Android Studio finish()方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android Studio finish()方法的使用与解决app点击“返回”(直接退出)

    在这里,我们将用到finish(),简单介绍一下它的使用: finish()官方解析:Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult()."当你打开的Activity已经执行完成并且需要被关闭的时候可以调用这个方法,当你按返回的时候,它将返回到当前Activity

  • Android Studio 运行按钮灰色的完美解决方法

    今天新建项目的时候突然发现编译后运行按钮为灰色. 解决方案: 第一步:点击图中的Add Configuration,出来如下界面 第二步:点+号,并选择Android App选项 出来下图所示界面 第三步:在Module 中下拉框中选择app 如果在Module 下拉框没有app这个选项 点击搜索框,输入sync,从搜索结果中选择如下项: 点击运行 然后就可以在Module下拉框中发现app这个选项了. 第四步: 点击Add Configuratio 选择app ,运行按钮就可以用啦. 到此这篇

  • Android Studio工程导入及坑的解决

    目录 Androdi Studio 导入工程步骤 本地工程导入 远端库导入 检查点&修改方案 local.properties Gradle版本 Android版本 由于工作原因,需要将工程传递给一些新人小朋友,交互过程中,发现有几个典型的问题值得记录分享一下,以资来者. Androdi Studio 导入工程步骤 AS导入工程常用的有两种途径一种是通过本地工程导入,还有一种是从远端的版本管理仓拉取工程. 本地工程导入 本地工程导入比较简单,点击菜单File,然后找到Open...点击,便可以得

  • Mac下完全卸载干净Android Studio的方法

    本文实例为大家分享了Mac完整卸载Android Studio的方法,供大家参考,具体内容如下 第一种:卸载Android Studio的方法 1.卸载Android Studio,在终端(terminal)执行以下命令: rm -Rf /Applications/Android\ Studio.app rm -Rf ~/Library/Preferences/AndroidStudio* rm ~/Library/Preferences/com.google.android.studio.pl

  • Android Studio一直处于Building的两种解决方法

    我们肯定遇到过打开别人的项目时一直处于Building'XXX'Gradle project info的情况.本文通过两种方法带领大家解决Android Studio一直处于Building的问题.具体内容详情如下所示: 然后就耐心等待了一会,然后就烦躁地再等待了一会,发现还没动静就果断点击了Cancel,但是发现并不能Cancel掉.最后只能强制结束掉AS. 事件的起因是别人项目的gradle版本和你使用的gradle版本不一致导致在打开项目的时候会去下载别人项目的gradle版本.但是呢,由

  • clipse项目迁移到android studio的方法(图文最新版)

    前言 最近Android studio(下文简称AS)官方发布了正式版,目前火得不行.个人认为主要是因为android是google自家的产品,AS也是他自己搞的IDE,以后的趋势android开发肯定会用AS,至于eclipse的adt插件是否继续更新就不可而知了.最近我也在android官网找了一下集成好的adt-bundle,但没有找到,可能是路径变了(搜索也没有找到)或者是真的为了支持AS就下架了.Github上现在也是一大堆的AS项目,所以这是个趋势啊. 之所以写本文是因为网上找的ec

  • Android Studio提示inotify大小不足的解决办法

    前言 Inotify会对工程内的所有文件夹设置"watch handle".不幸的是,Linux默认的watch handle的限值不能满足实际工程大小的需要,超过限值将强制IntelliJ重新扫描项目目录的递归树(这将非常耗时). 为了避免这种问题,我们推荐修改提高watches的限值(一般521k就可以了),以下是具体的解决步骤. 问题描述: 使用Android Studio 导入AOSP源码并且indexing完,ide右上角可能抛出警告"Kernel inotify

  • Eclipse NDK迁移到Android Studio的方法示例

    最近看一个NDK项目,因为源码使用Eclipse IDE写的,想把代码导入Android Studio使用,毕竟好用很多,使用AS导入后,第一个问题就是编码问题,项目之前竟然使用的是GBK编码.首先就是改变编码问题.我先在设置中将项目编码改为UTF-8,build结果显示一堆错误的乱码,在网上逛了一圈,找到解决方案. 编码 将AS右下角的UTF-8换成GBK. 跳出提示选择"reload",此时注释之类的乱码会显示正确. 右下角再选择UTF-8 跳出提示选择"convert&

  • android studio 新建项目报错的解决之路

    android studio 新建工程报错 Error:Could not resolve all files for configuration ':app:debugCompileClasspath'. > Could not resolve com.android.support:appcompat-v7:26.0.0-beta1.   Required by:       project :app    > Could not resolve com.android.support:a

  • 深踩Android Studio 缓存的坑及解决方法

    本文记录的是今天在群里提到的昨天所踩的一个坑,有关 AndroidStudio 缓存的. 先说一下背景. 我负责的一个项目,对一个图表库有外部依赖.这个图表库是我在维护的,由于新功能在开发中,所以我就使用了 SNAPSHOT 版本发布到 OJO(oss.jfrog.org) 上.我在项目中刚更新了依赖,忽然想到还少几个 API,于是发布了 SNAPSHOT 版本. 故事就这样开始了. 这时候回到 AndroidStudio 再去 Sync Project with Gradle Files 肯定

随机推荐