java - Android Java App 在最小化/制表时兑现
问题描述
每次我最小化我的应用程序时,它都会立即崩溃。错误如下:stackoverflow 还要求我添加的不仅仅是代码,所以这里有一些文本。此外,stackoverflow 要求我添加的不仅仅是代码,所以这里有一些文本。此外,stackoverflow 要求我添加的不仅仅是代码,所以这里有一些文本。此外,stackoverflow 要求我添加的不仅仅是代码,所以这里有一些文本。此外,stackoverflow 要求我添加的不仅仅是代码,所以这里有一些文本。此外,stackoverflow 要求我添加的不仅仅是代码,所以这里有一些文本。
2021-03-19 22:12:11.243 6919-7009/com.example.zawarudo E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.example.zawarudo, PID: 6919
java.lang.IllegalStateException: No recording in progress, forgot to call #beginRecording()?
at android.graphics.RenderNode.endRecording(RenderNode.java:404)
at android.view.Surface$HwuiContext.unlockAndPost(Surface.java:1029)
at android.view.Surface.unlockCanvasAndPost(Surface.java:418)
at android.view.SurfaceView$2.unlockCanvasAndPost(SurfaceView.java:1567)
at com.example.zawarudo.GameLoopThread.run(GameLoopThread.java:53)
我的线程逻辑中有错误吗?
public class GameLoopThread extends Thread {
private GameView view;
private boolean running = false;
public GameLoopThread(GameView view){
this.view = view;
}
public void setRunning(boolean run){
running = run;
}
@Override
public void run(){
Canvas c = null;
while (running){
try {
currentThread().sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
try{
view.getHolder().setFixedSize(1080,1920);
c = view.getHolder().lockHardwareCanvas();
c.rotate(90);
synchronized (view.getHolder()){
view.onDraw(c);
}
} finally {
{
view.getHolder().unlockCanvasAndPost(c);
}
}
}
}
}
gameThread = new GameLoopThread(this);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
gameThread.setRunning(true);
gameThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceChanged(SurfaceHolder holder) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameThread.setRunning(false);
while (retry) {
try {
gameThread.join();
retry = false;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class GameView extends SurfaceView implements zaInterface {
public GameMap tileMap = new GameMap();
private SurfaceHolder holder;
private GameLoopThread gameThread;
public GameView(Context context) {
super(context);
screenheight = Resources.getSystem().getDisplayMetrics().heightPixels;;
screenwidth = Resources.getSystem().getDisplayMetrics().widthPixels;
gameThread = new GameLoopThread(this);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
if (hasStarted==false) {
gameThread.setRunning(true);
gameThread.start();
hasStarted=true;
}
else{
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceChanged(SurfaceHolder holder) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
/*
boolean retry = true;
gameThread.setRunning(false);
while (retry) {
try {
gameThread.join();
retry = false;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
*/
}
});
}
这是我的游戏活动课
public class GameActivity extends AppCompatActivity {
private GameView GameView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().isActive();
GameMap.initialize();
GameView.initialize();
setContentView(new GameView(this));
}
}
解决方案
尝试SurfaceView
在活动暂停时停止。使用stopView()
@Override
protected void onPause() {
super.onPause();
if (gameThread != null)
gameThread.setRunning(false);
}
推荐阅读
- c++ - 删除线性链表的第一个节点
- python - 如何使用 FlaskWTF 在 Flask 网站上创建一个复选框并将结果添加到 SQLAlchemy?
- node.js - socket.io 发出消息时如何处理错误?
- java - 如何使用 Joda (java) 将字符串日期转换为毫秒?
- c++ - 如何判断两个像素是否属于同一行
- pine-script - 如何让 PineScript 达到特定的顺序?
- python - 拆分DF的更清洁方法?
- ios - 如何使用核心数据中的多个值?
- asp.net-core - 如何使使用 Adobe xd 制作的设计动态化?
- ios - 归档 SwiftUI 应用程序时找不到类