当前位置: 首页 > article >正文

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

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.kler.cn/news/353257.html

相关文章:

  • Safari 中 filter: blur() 高斯模糊引发的性能问题及解决方案
  • VMamba:视觉SSM
  • 软件工程的学习之详细绪论
  • 基于vue框架的的二手数码产品回收管理系统bodx1(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • CTFHUB技能树之SQL——字符型注入
  • 算法魅力-双指针的实战
  • 视频质量评价算法 DVQA 介绍
  • SpringCloud学习:Micrometer链路追踪 + GateWay网关
  • 【每日一题】Leetcode每日一题 - 两数相加
  • Chrome DevTools 一:简介 Console (入门必看)
  • nn.Conv2d(二)
  • 【Vue.js设计与实现】阅读笔记目录(持续更新)
  • 使用scss生成旋转圆圈
  • Python 面向对象编程 (OOP) 深入解析
  • windows10系统-使用自定义字体
  • SPSS 分类模型实训步骤 (以 Logistic 回归为例)
  • 单链表和双向链表区别 and 双向链表的增删改查!
  • GC1272替代APX9172/茂达中可应用于电脑散热风扇应用分析
  • STM32——USART原理及应用
  • Springboot + zset + lua 实现滑动窗口
  • 【JAVA-数据结构】二叉树
  • 离岗睡岗预警系统 值班室离岗识别系统Python 结合 OpenCV 库
  • 【工具】一些很不错的资源合集
  • 2024百度云智大会|百度大模型内容安全合规探索与实践
  • day11-SpringMVC
  • JavaScript(JS)基础(二)