Android Back 键与Home键相互作用效果

news/2024/10/15 6:02:52/

android的手机的back键默认行为是finish处于前台的Activity的即Activity的状态为Destroy状态,再次启动该Activity是从onCreate开始的。 而Home键默认是stop前台的Activity即状态为onStop而不是Destroy,若再次启动它,则是从OnResume开始的,即会保持上次Activityd的状态。 back键也有例外的,按back键不会关闭Activity的,比如播放音乐,按了back键之后仍可以继续播放音乐,这是Music这支ap已经重写了back键的事件处理。 为什么需要Home键和Back键呢?一个使得Activity 为Stop一个使得为Destroy呢?我想原因的原因在于是android也是一个多任务的操作系统,通过Home键切换不同的任务,而通过back关闭任务中的某一个活动。

back键【退出销毁】
     按back键会让当前activity调用onDestroy并消亡,且不调用onSaveInstanceState(Bundle)。
默认情况下,按back键,Activity会调用finish()。finish()的调用是在Activity的onBackPressed(),你可以重载它来自定义back键的行为。
因为调用finish()已经明确说明要结束当前Activity,所以就没必要调用onSaveInstanceState(Bundle)保存的Bundle数据。

当此Activity再次启动起来的时候,会重新调用OnCreate()方法进行创建。

              
home键【退出不销毁】
       当按下手机的Home键的时候,系统会默认调用栈中最上层Activity的OnStop()方法,然后整个应用程序都会被隐藏起来,当再次启动程序的时候,系统会调用最上层Activity的OnResume()方法,直接显示栈中最上层的Activity。

 

 一:按返回键实现home键效果,按返回键不销毁当前Activity;

法一:moveTaskToBack不销毁

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            moveTaskToBack(true);
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

 法二:按BACK跳转到Home界面的代码即可,相当于按下home键。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            Intent i = new Intent(Intent.ACTION_MAIN);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.addCategory(Intent.CATEGORY_HOME);
            startActivity(i);
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

法三:重写onBackPressed()方法里修改:

@Override
public void onBackPressed() { 
    //实现Home键效果 
    //super.onBackPressed();这句话一定要注掉,不然又去调用默认的back处理方式了 
    Intent i= new Intent(Intent.ACTION_MAIN); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.addCategory(Intent.CATEGORY_HOME); 
    startActivity(i);  
}

二:home键实现back键行为和生命周期

情况一:按home键如果被销毁,原本不应该销毁的

办法:activity配置里加上android:taskAffinity=".taskCall"这个 这样按home键的时候就不会被销毁 

情况二:按home键实现销毁,想销毁

Activity设置启动模式android:launchMode="singleInstance" 按home键后会销毁 

情况三:home模拟back按键

new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Instrumentation inst = new Instrumentation();
                                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }).start();


http://www.ppmy.cn/news/1539300.html

相关文章

元数据 - Photoshop

Photoshop Photoshop元数据用于记录和管理与图像和媒体文件相关的描述性信息。这些元数据字段源自 Photoshop,提供了关于文件内容、创作者、拍摄地点和使用限制等关键信息,支持媒体资产的有效管理和版权保护。 作者职位 Authors Position 记录“创建者”…

Java 中 LinkedList 和 ArrayList 的区别

在 Java 编程中,LinkedList和ArrayList都是常用的数据结构,用于存储和操作一组元素。它们在实现方式和性能特点上存在一些显著的区别。本文将详细介绍LinkedList和ArrayList的区别,以帮助开发者在不同的场景下做出合适的选择。 一、底层数据结…

八卦GPT-5的一切

这篇超长文章——既是评论,也是探索——关于GPT-5 对最受期待的下一代 AI 模型的深入分析 但它不仅仅是关于GPT-5。 • 它涉及我们对下一代AI模型的期望。 • 它关于即将出现的令人兴奋的新功能(如推理和代理)。它不仅讨论GPT-5技术本身&…

Recaptcha3 协议识别 API 对接说明

本文将介绍一种 Recaptcha3 协议识别 API 对接说明,它可让用户无需识别和点选 Recaptcha3 验证码图片,仅需通过提交 Website Key 即可实现后台自动解码,完成验证。 接下来介绍下 Recaptcha3 协议识别 API 的对接说明。 申请流程 要使用 AP…

“element-plus“: “~2.6.1“和“element-plus“: “^2.6.1“在xue项目package.json配置的主要区别

‌"element-plus: ~2.6.1"‌ 表示安装的element-plus版本将在2.6.1的基础上允许有一定的版本浮动范围,但不会超出主版本号。这意味着可以安装2.6.x的任何补丁版本,但不会升级到2.7.x的新版本。这种策略适合于希望稳定使用特定版本的开发者&…

RTSP推流服务搭建

安装 https://zhuanlan.zhihu.com/p/633120372 快速开始 ZLMediaKit/ZLMediaKit Wiki GitHub 启动服务 sudo ./MediaServer -d& 开始推流 ffmpeg -re -i "/home/hou/rtsp/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1…

【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)

目录 零.前置篇章 一.make的由来 二.安装make 三.编写Makefile 四.编译运行 五.删除可执行文件 零.前置篇章 第一篇【Linux快速入门】Linux与ROS学习之编译基础(gcc编译)_linuxros-CSDN博客 一.make的由来 "make"是一个用于自…

java内存管理

Java内存管理主要涉及Java虚拟机(JVM)对内存的分配与回收过程。这一过程确保了Java程序在运行时能够有效地使用内存资源,同时避免了手动管理内存所带来的复杂性和潜在错误。 内存分配: 堆(Heap)&#xff1a…