java检测安卓程序退出_java-我的Android应用程序的gameLoop线程在退出...
问题是当我进入游戏并单击“主页”按钮时,gameLoop线程(我想)被弄乱了,然后弹出“不幸的是,“应用名称”已停止”.
我已经制作了一个非常简单的程序来解决此问题.该程序所做的全部工作就是在屏幕上显示一个数字,并在您触摸屏幕时增加它.
当我在GameLoopThread中注释掉view.onDraw(c)时,一切似乎运行良好.
错误信息:
FATAL EXEPTION: Thread-23207
java.lang.NullPointerExeption
at com.example.crashtest.GameView.onDraw(GameView.java:61)
at com.example.crashtest.GameLoopThread.run(GameLoopThread.java:34)
这是代码:
MainActivity.java
package com.example.crashtest;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.Configuration;
import android.view.KeyEvent;
import android.view.Window;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new GameView(this));
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
case KeyEvent.KEYCODE_MENU:
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
return true;
default:
return false;
}
}
}
GameView.java
package com.example.crashtest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView {
private SurfaceHolder holder;
private GameLoopThread gameLoopThread;
private int num = 0;
public GameView(final Context context) {
super(context);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
makeThread();
gameLoopThread.start();
gameLoopThread.setRunning(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
});
}
private void makeThread() {
gameLoopThread = new GameLoopThread(this);
}
@SuppressLint({ "WrongCall", "DrawAllocation" })
@Override
protected void onDraw(Canvas canvas) {
// Draw black background - Write variable 'num' on the screen
canvas.drawColor(Color.BLACK);
Paint paint = new Paint();
paint.setARGB(255, 0, 255, 0);
paint.setTextSize(50);
paint.setTextAlign(Align.CENTER);
canvas.drawText(Integer.toString(num), getWidth() / 2, getHeight() / 2, paint);
}
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
// Increase 'num' with 1 every touch
num++;
}
return super.onTouchEvent(event);
}
}
GameLoopThread.java
package com.example.crashtest;
import android.annotation.SuppressLint;
import android.graphics.Canvas;
public class GameLoopThread extends Thread {
static final long FPS = 10;
private GameView view;
public boolean running = false;
public boolean pause = false;
public GameLoopThread(GameView view) {
this.view = view;
}
public void setRunning(boolean run) {
running = run;
}
@SuppressLint("WrongCall")
@Override
public void run() {
long ticksPS = 1000 / FPS;
long startTime = 0;
long sleepTime = 0;
while (running) {
Canvas c = null;
startTime = System.currentTimeMillis();
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = ticksPS-(System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
} catch (Exception e) {}
}
}
}
java检测安卓程序退出_java-我的Android应用程序的gameLoop线程在退出...相关推荐
- Android程序 地图,在定制的Android应用程序中使用谷歌地图
我收到以下问题(显示在LogCat中).我希望any1可以帮助我,因为我是android应用程序开发的新手.在定制的Android应用程序中使用谷歌地图 11-17 16:50:38.087: E/A ...
- android重新加载程序,从被杀死的Android应用程序中恢复
发生了什么: >我打开我的应用程序,然后按主页按钮离开它片刻. >我进入设置>应用程序>管理应用程序>运行,在缓存的后台应用程序列表中找到我的应用程序,然后停止它. &g ...
- 允许网页打开android应用程序,通过浏览器直接打开Android应用程序
需求 通过手机浏览器直接打开Android应用程序.假设本地已经安装了指定Android应用,就直接打开它:假设没有安装,则直接下载该应用的安装文件(也能够跳转到下载页面). 实现效果 假设手机上已经 ...
- Android程序的几个组成部分,Android应用程序开发的四个重要组成部分
51CTO为大家介绍过<Android SNK初探>,Android开发必须要了解构造块,Android应用程序是由四个重要组成部分组成的,这四种构造块如下: ◆Activity ◆Int ...
- java检测安卓程序退出_java – 退出应用程序时的Android停止服务
我正在创建一个带有背景音乐的游戏应用程序.我使用Android服务进行游戏 背景音乐,因为我想在改变活动时运行BGM. 我的问题是,我在每个活动中的onPause方法中声明了finish()(我不想让 ...
- java检测安卓程序退出_Android:应用程序退出后出现奇怪的NameNotFoundException
安装ADT r22之后,每次关闭应用程序时,我都会在LogCat中收到此异常: E/LuckyLauncherView(227): in setViewEveryArea() E/LuckyLaunc ...
- java 不退出_Java项目不挂断运行,即当账户退出或终端关闭时,程序仍然运行,并附上执行脚本...
把打包好的jar包上传服务器以后,直接运行java -jar+文件名 命令即可以完成启动. 若需要在公网上如何不挂断开启程序,可以使用nohup java -jar +文件名 &命令,其中no ...
- java编写类骑士游历_java课程设计骑士游历程序的开发
java课程设计骑士游历程序的开发 JAVA程序设计 课程设计报告 课 题: 骑士游历程序的开发 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 2013.06.10 评阅意见: ...
- java程序安装_java实现可安装的exe程序
java实现可安装的exe程序 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格式的ja ...
最新文章
- 使用Gradle第一次构建Web应用
- model1模式变为mv模式,实现业务逻辑和画面的分离
- MyBatis架构设计及源代码分析系列(一):MyBatis架构
- gif android. 耗资源,Android MP4转GIF
- 关于.net core http error 502.5 - process failure
- 教你如何使用 OpenCV检测图像中的轮廓
- 720环物全景制作_什么是全景?关于360°全景和720°全景的区别你知道吗?
- python设计模式(十四):模板方法模式
- python concat_python中merge、concat用法
- shiro学习(19): 拦截器
- python中列表如何比较大小_如何比较python中的列表/列表?
- jq之slidedown()
- ueditor 在线附件和在线图片路径错误BUG补丁
- JS 和 Java 中URL特殊字符编码方式
- Virident:PCIe SSD更能发挥闪存的特长
- Unix/Linux操作系统介绍
- 用C 程序理解汉字的机内码表示
- IDEAIU-version2019.2百度网盘下载
- 【服务器管理】服务器主机插内存条技巧
- 二维码的生成细节和原理源码