在这里,我们将用到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,Android Studio finish()方法的使用与解决app点击“返回”(直接退出)...相关推荐

  1. 连续点击返回键退出Android 应用

    问题 业务需要,在主界面连续点击返回键退出应用,记录一下. 解决方案 先说结论,在主界面Activity中添加如下代码 /*** 记录上次点击返回键时间*/private long lastClick ...

  2. IntelliJ IDEA设置方法注释模板并解决入参和返回值为空问题

    ## 简介 网上讲解设置方法注释模板的文章很多,尝试了很多方法后,发现在方法体外生成的模板入参值和返回值都是null,而放到方法体内的入参值和返回值就可以自动生成.苦试N次,终于发现诀窍.Idea的这 ...

  3. webview和android做壳,Android Studio 制作一个 WebView 外壳

    背景 做为一条BS狗,开发应用当然趋向于BS,为了方便维护,降低开发成本,决定只做一个webview做为程序入口,所有的功能页面集中在服务端. 本次踩坑遇到了 js不支持.点击返回直接退出应用.htt ...

  4. Android Studio导入第三方类库的方法

     Android Studio导入第三方类库的方法 本人也刚刚开始尝试做android app的开发,听说android studio是Google支持的android 应用开发工具,所以想应该肯 ...

  5. android studio socket 失败,Android应用开发Android Studio建立Socket连接失败解决方法

    本文将带你了解Android应用开发Android Studio建立Socket连接失败解决方法,希望本文对大家学Android有所帮助. < Android Studio建立Socket连接失 ...

  6. android studio gradle 自动更新,android studio gradle 两种更新方法更新

    又快一年没有使用AS了,正好要查看一个Android项目代码,干脆升级到新版试试看新变化,旧版本为3.1.2,目前最新版本为3.4.2,AS的升级是很简单的直接update等待即可. 升级完了,打开G ...

  7. android studio viewo,android studio 3.6.0 绑定视图新特性的方法

    Android studio 3.6.0 绑定视图使用方法 1.确保你的 build gradle 最低为3.6.0 dependencies { classpath 'com.android.too ...

  8. Android Studio Design界面不显示layout控件的解决方法

    Android Studio Design界面不显示layout控件的解决方法 参考文章: (1)Android Studio Design界面不显示layout控件的解决方法 (2)https:// ...

  9. Android——Android Studio导入SlidingMenu类库的方法

    Android Studio导入SlidingMenu类库的方法(其他类库应该也适用) 本篇文章主要介绍了"Android Studio导入SlidingMenu类库的方法(其他类库应该也适 ...

最新文章

  1. 【Gradle】借助gradle的ProductFlavor实现多App间代码库复用
  2. 译:Spring Data Repository 不区分大小写查询
  3. Java并发基础:了解无锁CAS就从源码分析 1
  4. centos查看网关地址
  5. vs升级c++项目遇到的一些问题
  6. 给1-3年的前端 6 点诚心建议
  7. Python学习之旅:使用Python实现Linux中的ls命令
  8. Python使用pandas读取Excel文件数据和预处理小案例
  9. idea项目能放入eclipse_IDEA导入eclipse项目并且部署到tomcat的步骤详解
  10. 教你如何入门【大数据开发】?
  11. 关于英语单词记忆的总结
  12. opencv 去高光
  13. CSR867x — 如何修改BLE的蓝牙地址
  14. Partial RenderPartial Action RenderAction 区别和用法
  15. webpack配置完全指南
  16. 学习MySQL的第一步:安装MySQL及数据库可视化工具Navicat
  17. 7种分析问题的思维方法
  18. ZZULIOJ:1123:最佳校友
  19. Java实现荷兰国旗问题
  20. java list namevaluepair_HashMap String,String和List NameValuePair之间的区别

热门文章

  1. 道格拉斯·普克算法 JAVA实现
  2. ORA-09817 WIRTE TO AUDIT FILE FAILED
  3. K8S指定调度节点:spec.nodeName的使用示例
  4. 医疗html响应式模板,响应式医疗HTML5模板
  5. NuttX开发环境搭建及启动流程
  6. html调整按钮字号,html – 调整按钮大小
  7. 手机GPU使用率的获取
  8. mysql之explain(性能分析)
  9. 中文文本关键词抽取的三种方法-python
  10. 文本分析--jieba中文分词