Android开发教程:游戏过程中按Home键后返回游戏界面

Android键盘按下事件:监听Home键无效,仅能监听返回键 然而,在处理键盘事件时,我们会遇到一些问题,例如无法监听到Home键的按下事件。本文将为您介绍如何监听返回键的按下事件,并解释为什么无法监听到Home键的按下事件。由于无法直接监听Home键的按下事件,我们也无法在应用程序中捕获该事件。希望本文能帮助您理解如何在Android应用程序中监听返回键的按下事件,并解释为什么无法监听到Home键的按下事件。方法来处理Home键的行为。然而,无论如何修改代码,我们都无法监听到Home键的按下事件。总结起来,无法直接监听Home键的按下事件,但可以通过监听。 阅读详情

http://www.linuxidc.com/Linux/2011-11/48318.htm

 

症状:游戏过程中,按下Home键返回手机主菜单,再点击游戏图标试图返回游戏的时候屏幕黑的一片!


以前一直没在意只有结束线程在运行游戏,今天觉得改仔细琢磨一下这个问题了!


首先第一件事:打印Logo看看按下Home键后会调用哪些方法,结果如下:

游戏过程中按下Home后:

11-29 20:42:07.090: I/System.out(18835): Activity onPause...
11-29 20:42:14.190: I/System.out(18835): Activity  onStop...
11-29 20:42:14.260: I/System.out(18835): SurfaceView surfaceDestroyed...

 

可见SurfaceView 在返回手机主菜单的时候被销毁了,而我的SurfaceView 主线程是在构造方法里创建的

那么我们返回游戏的时候会调哪些方法呢?接着看Log:

11-29 20:48:06.940: I/System.out(18835): Activity  onRestart...
11-29 20:48:06.950: I/System.out(18835): Activity  onResume...
11-29 20:48:07.230: I/System.out(18835): SurfaceView  surfaceCreated...
11-29 20:48:07.240: I/System.out(18835): SurfaceView  surfaceChanged...

 

surfaceDestroyed 的时候线程已经退出了运行,这时再返回到游戏刷屏的线程就没了,任何绘制方法都没调用,所以你看到的只有黑漆漆的屏幕啦!
明白了运行原理我们就知道改怎么做啦!


首先创建线程放在 surfaceCreated ,并启动线程,

当 surfaceDestroyed 调用的时候,线程已经无效了,我们把线程对象设为null释放他,

然后不管怎么返回线程都会继续运行你的游戏也就不会中断了,来段简单的代码更具表达力度!

package com.game.view;  
  
import Android.content.Context;  
import Android.graphics.Canvas;  
import Android.graphics.Paint;  
import Android.graphics.Paint.Style;  
import Android.graphics.Rect;  
import Android.view.SurfaceHolder;  
import Android.view.SurfaceHolder.Callback;  
import Android.view.SurfaceView;  
  
public class TestView extends SurfaceView implements Callback, Runnable{  
    public static final int GAME_HEART = 1000/30;   //每秒刷新30次   
      
    public static int screenW, screenH;  
      
    private Thread thread;  
    private SurfaceHolder holder;  
    private Paint paint;  
      
    public TestView(Context context) {  
        super(context);  
        // TODO Auto-generated constructor stub   
        holder = getHolder();  
        holder.addCallback(this);  
          
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);// 无锯齿   
        paint.setStyle(Style.FILL); //填充样式   
        paint.setTextSize(16); // 字体大小   
    }  
  
    /** 
     * 执行游戏逻辑方法 
     */  
    private void update() {  
          
    }  
      
    /** 
     * 执行游戏绘制 
     */  
    private Rect rect = new Rect();  
    private void draw(){  
        Canvas canvas = holder.lockCanvas();  
          
        String text = "天使之翼的示例Demo";  
        //获取文本宽高   
        paint.getTextBounds(text, 0, text.length(), rect);  
        //在屏幕中央位置显示文本   
        paint.setColor(0xfff000f0); //注意最高两位 ff 代表画笔透明度,不设置的画就是完全透明了,看不到任何效果   
        canvas.drawText(text,   
                (screenW - rect.width())/2,   
                screenH/2 + rect.height()/2,   
                paint);  
          
        holder.unlockCanvasAndPost(canvas);  
    }  
      
    @Override  
    public void surfaceCreated(SurfaceHolder holder) {  
        // TODO Auto-generated method stub   
        screenW = getWidth();  
        screenH = getHeight();  
          
        thread = new Thread(this);  
        isRun = true;  
        thread.start();  
    }  
  
    @Override  
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  
        // TODO Auto-generated method stub   
        //当屏幕旋转的时候重新获取屏幕宽高   
        screenW = getWidth();  
        screenH = getHeight();  
    }  
  
    @Override  
    public void surfaceDestroyed(SurfaceHolder holder) {  
        // TODO Auto-generated method stub   
        isRun = false;  
        thread = null;  
    }  
  
    private boolean isRun;  //线程运行标志   
    private int useTime;    //记录每次刷屏使用的时间   
    @Override  
    public void run() {  
        // TODO Auto-generated method stub   
        long start, end;  
          
        while(isRun){  
            start = System.currentTimeMillis();  
            update(); // 刷新界面上所有元素   
            draw(); // 绘制界面元素   
            end = System.currentTimeMillis();  
            useTime = (int) (end - start);  
              
            if(useTime < GAME_HEART){    //保证每次刷屏时间间隔相同   
                try {  
                    Thread.sleep(GAME_HEART - useTime);  
                } catch (InterruptedException e) {  
                    // TODO Auto-generated catch block   
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
} 
本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-11/48318.htm

python批量生成CAD图纸 阅读详情

相关推荐

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1191

android 返回到首页案例

很多年前做Android开发,经常遇到页面跳转需要返回到指定页面的需求。

shi450561200的博客 1098

嵌入式开发避坑指南:手把手教你用STM32CubeMX配置W9825G6KH SDRAM(含时序参数详解)

本文详细介绍了如何使用STM32CubeMX配置W9825G6KH SDRAM,包括硬件连接检查、CubeMX初始化步骤、时序参数优化及稳定性问题排查。通过实测波形分析和案例分享,帮助开发者避免常见配置错误,提升嵌入式系统性能与稳定性。

weixin_42542669的博客 197

android 使程序完全退出及退回到主界面

一、使程序完全退出 1、使用ActivityManager: ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE); am.restartPackage(getPackageName()); //虽为 restart,但并不是重启 系统会将该包下的所有活动、服务全部杀掉,

Android翻山之路 5719

单细胞分析(16)—— RNA Velocity 分析流程

RNA velocity 是一种强大的单细胞转录组分析工具,它可以预测细胞的未来状态,揭示发育轨迹,并用于探索细胞状态转换。RNA velocity 是一种通过单细胞 RNA 测序(scRNA-seq)数据推测细胞未来状态的分析方法。🚀**RNA velocity 提供了一个全新的角度来理解细胞的动态变化,为单细胞转录组分析带来了更深入的时空信息!

阅读文献,记录学习笔记 2979

开源低场MRI系统构建:从原理到三天实现

磁共振成像(MRI)作为现代医学影像的核心技术,其高场强系统存在成本和技术门槛问题。低场MRI通过开源硬件和模块化设计实现技术民主化,采用永磁体替代超导磁体可大幅降低系统复杂度。本文以H型永磁体设计为例,结合MaRCoS开源控制库和PyPulseq脉冲序列工具,展示了如何快速构建教育级MRI系统。关键技术包括遗传算法优化的匀场方案、CNC加工的梯度线圈,以及基于Red Pitaya的SDR控制架构。这种轻量化方案特别适合医学物理教学和脉冲序列开发验证,为MRI技术在资源有限地区的普及提供了新思路。

weixin_30470643的博客 449

APP未运行,从通知跳转到APP某界面,点击返回直接跳转到主页

实际工作中遇到一个需求,点击头部通知进入APP某页面,点击返回键直接跳转到主页1.新建一个类作为活动管理器  添加activity到堆栈  通过获取activity是否存在可实现操作public class AppManager { private static Stack&lt;Activity&gt; activityStack; private static AppManag...

weixin_36002948的博客 1246

Ubuntu 18.04下Freesurfer 7.2.0安装全攻略:从下载到环境配置一步到位

本文详细介绍了在Ubuntu 18.04系统上安装Freesurfer 7.2.0的完整流程,包括系统准备、依赖安装、下载解压、环境配置、许可证获取及性能优化。Freesurfer作为神经影像分析的重要工具,支持皮层重建和体积分割等复杂任务,适用于阿尔茨海默症等神经系统疾病研究。指南还提供了常见问题解决方案和实际应用案例,帮助用户快速搭建高效的神经影像分析平台。

omega的博客 996

正在运行的android程序,按home键之后退回到桌面,再次点击桌面图标避免再次重新启动程序的终极解决办法

在网上找了好多方法,有的说 在AndroidManifest.xml中修改,MainActivity的launchMode,去掉android:launchMode="singleTask"启动模式即可。 AndroidManifest.xml的配置代码 可是我的代码就是这样写的,却不生效。 还有的竟然说是内存不足,可是为什么像淘宝京东都可以,偏偏我的应用不行呢, 找了好

qq_34198206的博客 1万+

Qt图形几何之QRect详解:从基础操作到高级功能全解析

本文全面介绍了Qt框架中的QRect类,详细解析了其核心功能和使用方法。主要内容包括:1)QRect的基本概念与多种构造函数;2)矩形属性获取和状态判断方法;3)几何操作函数(移动、调整大小等);4)几何关系判断(包含、相交等);5)坐标变换和边距处理;6)实用功能与QRectF转换;7)综合应用示例(图形界面、碰撞检测、布局管理);8)性能优化建议和常见陷阱。通过丰富的代码示例,展示了QRect在Qt图形编程中的实际应用,帮助开发者掌握矩形处理的各项操作技巧,提升图形界面开发效率。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 117

MCAL中Dsadc的配置

DSADC模块作为一个专用的模块,主要应用在编码器软解码,功能强大而复杂,这里介绍了Dsadc的mcal配置和详细描述,让你全面学习和理解这个模块功能和应用。

dhyw12399999的博客 788

Android游戏返回菜单,Android开发教程:游戏过程中按Home键后返回游戏界面

症状:游戏过程中,按下Home键返回手机主菜单,再点击游戏图标试图返回游戏的时候屏幕黑的一片!以前一直没在意只有结束线程在运行游戏,今天觉得改仔细琢磨一下这个问题了!首先第一件事:打印Logo看看按下Home键后会调用哪些方法,结果如下:游戏过程中按下Home后:11-29 20:42:07.090: I/System.out(18835): Activity onPause...11-29 20...

weixin_28786193的博客 556

一文吃透 Tools for Applying SAP Notes:从 SNOTE、TCI 到 Solution Manager 与 SAP Cloud ALM

本文系统梳理了SAP技术与运维团队应用SAP Notes的高效工具与方法,涵盖On-Premise与云环境。文章首先阐述了精研SAP Notes工具的必要性,指出其是实施错误修复、法务变更和性能改进的关键载体。随后详细介绍了SNOTE、TCI、Solution Manager、Cloud ALM和Maintenance Planner等核心工具的定位与适用场景,并通过采购异常案例展示了标准更正流程。针对复杂修复场景,文章提出了TCI的批量处理方案,并强调将Note实施纳入变更治理流程的重要性。最后总结了三种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 354

linux时间界面返回,Android开发教程:游戏过程中按Home键后返回游戏界面

症状:游戏过程中,按下Home键返回手机主菜单,再点击游戏图标试图返回游戏的时候屏幕黑的一片!以前一直没在意只有结束线程在运行游戏,今天觉得改仔细琢磨一下这个问题了!首先第一件事:打印Logo看看按下Home键后会调用哪些方法,结果如下:游戏过程中按下Home后:11-29 20:42:07.090: I/System.out(18835): Activity onPause...11-29 20...

weixin_29174013的博客 121

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 点击返回键home,android Home键和返回键

在Android中,当按下Home键,默认情况下stop前台的actiity,即activity设置成onstop,而不是ondestory。如果再次启动该activity不是调用onCreate,而是调用onSavedInstanceState方法,保持上次Activity的状态则是从onRestart开始->onStart->onResume;而当按下back键则不同,back键默...

weixin_39997695的博客 1225

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

unity调用安卓原生activity,按Home键返回被杀死问题解决

做过unity与安卓原生交互的同学应该都知道,我们在unity里面调用安卓原生的activity,按Home键返回到桌面,之后重新进入unity场景,安卓原生的activity就会被杀掉。 其实这个问题做过安卓的人都知道,这个关乎到安卓对于activity的运行机制问题,这些问题这里不想再多说了,网上有太多关于launchMode的解答例如: http://blog.youkuaiyun.com/liuh

wangkongbao的博客 4948

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

unity调用安卓手机物理返回键和home键

使用unity制作游戏时,有时候需要在游戏中触发手机的物理返回键和home键,下面在update方法中每帧监听是否按下了该键,然后写入自己要调用的方法 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Physics_exit : MonoBehaviour { ...

yffgamestart的博客 2162

游戏过程中按Home键后返回游戏界面

症状:游戏过程中,按下Home键返回手机主菜单,再点击游戏图标试图返回游戏的时候屏幕黑的一片! 以前一直没在意只有结束线程在运行游戏,今天觉得改仔细琢磨一下这个问题了! 首先第一件事:打印Logo看看按下Home键后会调用哪些方法,结果如下: 游戏过程中按下Home后: 11-29 20:42:07.090: I/System.out(18835): Activity onPause.

z1074971432的专栏 3577

unity android home键,unity调用安卓原生activity,按Home键返回被杀死问题解决

做过unity与安卓原生交互的同学应该都知道,我们在unity里面调用安卓原生的activity,按Home键返回到桌面,之后重新进入unity场景,安卓原生的activity就会被杀掉。其实这个问题做过安卓的人都知道,这个关乎到安卓对于activity的运行机制问题,这些问题这里不想再多说了,网上有太多关于launchMode的解答例如:http://blog.youkuaiyun.com/liuhe688...

weixin_35306450的博客 962

安卓Home键劫持:游戏输入功能设计全解析

安卓游戏Home键功能设计的技术挑战与解决方案 本文深入探讨了安卓游戏开发中Home键功能设计面临的技术难题。由于安卓系统将Home键视为最高优先级的系统事件,开发者无法直接拦截或自定义其行为,导致游戏内Home键映射需求与系统限制之间存在根本冲突。文章系统分析了Home键事件的分发机制、设备兼容性差异和用户体验冲突,并提出了多种工程化解决方案,包括功能替代策略、输入事件降级处理、用户自定义映射系统等技术方案。同时详细介绍了生命周期监听、输入设备状态恢复等具体实现方法,为游戏开发者提供了规避Home键劫持问

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 962

Android 小米盒子游戏手柄按键捕获 - 能获取到的 home 键依然是个痛

Android 小米盒子游戏手柄按键捕获

太阳火神的美丽人生 5304

【cocos2dx】监听安卓机的返回键

在玩cocos2d-x的时候,每次真机实测,都要按home键来‘退出’游戏,因为没有监听返回键,这让我想起了某个版本的手机QQ,也是没有监听返回键来着。 来简单写一下cocos2d-x监听安卓的返回键。   简单的用helloworld项目来实验 首先在.h文件覆盖onKeyReleased函数。 virtual void onKeyReleased(EventKeyboard::Ke

lif的博客 4175

Unity响应Android的返回键,Home键

// 返回键   if ( Application.platform == RuntimePlatform.Android &&(Input.GetKeyDown(KeyCode.Escape)))   {       //....   }      // Home键   if ( Application.platform == RuntimePlatform.Android &&(

qq_38008632的博客 2855

Unity中安卓按下home键、按下返回键、按下按钮退出程序

using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 功能:返回home界面 /// </summary> public class My_test10_returnHome : MonoBehaviour { void ...

qq_40544338的博客 1152

Unity获取Android安卓主页Home键和Back返回键

助力快速通过 Unity 获取安卓 Android 手机上的主页、返回键 Unity获取安卓键位 Unity获取Android安卓主页Home键和Back返回键 Home、Back ——主页键、返回键 Unity 中通过代码获取 Android 端主页键、返回键

Chinar优快云的博客 5381

android home键监听,Android 监听Home键

游戏需要统计用户退出游戏是按的返回键还是home,因为返回键是自己cocos2dx做的监听,所以这里说一下android Activity里监听Home键方法,亲测可用,这里做个备份其中也是参考别人的代码实现的,路径没有记住,如有雷同,望见谅……这里使用的是广播的形式监听Home操作的方法:首先在MainActivity里添加如下广播,生成一个成员变量:privatefinalBroadcas...

weixin_29098391的博客 229
上一篇: LUA学习笔记
下一篇: 移动广告商点评--多盟
dingdingko
博客等级 码龄20年 50粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值