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

作者:一种天气 时间:2022-07-31 09:37:10 

在这里,我们将用到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

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

点击左上角的自定义的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);
}

来源:https://blog.csdn.net/weixin_44743543/article/details/105466701

标签:Android,Studio,finish(),app
0
投稿

猜你喜欢

  • mybatis中foreach嵌套if标签方式

    2023-11-20 23:11:05
  • Java详细分析梳理垃圾回收机制

    2023-10-30 04:02:33
  • 教你如何使用platform密钥对apk进行签名

    2023-12-09 06:10:59
  • Java Thread 类和Runnable 接口详解

    2023-11-10 20:16:00
  • Android DatePicker和DatePickerDialog基本用法示例

    2022-08-24 13:33:10
  • Java中id,pid格式数据转树和森林结构工具类实现

    2021-07-10 08:46:17
  • mybatis的if判断integer问题

    2022-12-23 20:15:41
  • 使用TypeScript开发微信小程序的方法

    2023-08-30 10:42:03
  • android选项卡TabHost功能用法详解

    2021-09-24 01:41:27
  • C#获取真实IP地址(IP转为长整形、判断是否内网IP的方法)

    2022-01-31 08:50:06
  • C#生成随机验证码代码分享

    2023-07-17 21:22:26
  • Linux下g++编译与使用静态库和动态库的方法

    2023-06-21 13:41:46
  • 详解Mybatis中的select方法

    2023-06-10 05:44:49
  • 使用Java程序模拟实现新冠病毒传染效果

    2022-09-12 20:26:14
  • Android Spinner 下拉菜单的使用

    2023-10-25 10:59:53
  • Flutter实现底部导航栏

    2023-05-18 15:10:26
  • Android实现手机震动效果

    2022-11-05 12:20:43
  • SpringMVC 域对象共享数据的实现示例

    2021-07-18 15:45:57
  • 一文带你了解SpringBoot中常用注解的原理和使用

    2022-07-22 14:27:43
  • SpringBoot2.0整合SpringCloud Finchley @hystrixcommand注解找不到解决方案

    2021-08-26 12:54:32
  • asp之家 软件编程 m.aspxhome.com