另一个活动已获得关注后返回SurfaceView

概述我正在使用LunarLanderAPI演示开发适用于Android的RPG.我已经使用此演示制作了一个游戏(《豪猪刺客》,快来看看!),因此我对Canvas类和类似的东西有了很好的了解.我的问题是,在RPG中,您需要一种访问库存,统计信息等的方法.因此,我将BACK按钮设置为启动Inventory.java类.我在完成()

我正在使用LunarLander API演示开发适用于Android的RPG.我已经使用此演示制作了一个游戏(《豪猪刺客》,快来看看!),因此我对Canvas类和类似的东西有了很好的了解.

我的问题是,在RPG中,您需要一种访问库存,统计信息等的方法.因此,我将BACK按钮设置为启动Inventory.java类.我在完成()库存活动并尝试返回游戏(SurfaceVIEw)时遇到问题.

这是SurfaceCreated()回调:

public voID surfaceCreated(SurfaceHolder holder) {    thread.setRunning(true);    thread.start();}

我收到由“ IllegalThreadStateException:线程已启动”引起的FC,因此我在SurfaceCreated()回调中添加了try / catch.使用try / catch时,没有FC发生,但是我返回了黑屏.

我试过尝试/赶上并在开头添加了一个检查:if(!thread.isAlive()).这样,如果线程已经启动,它将不会执行任何 *** 作.奇怪的是,我得到了相同的FC“线程已启动”,因此thread.isAlive()必须返回false.

我也有API的onWindowFocusChanged()方法:

@OverrIDepublic voID onWindowFocusChanged(boolean hasWindowFocus) {    if (!hasWindowFocus) thread.pause();    else thread.setState(STATE_RUNNING);}

我非常热衷于游戏,我为RPG奠定了大部分基础.但是,所有这些AndroID / Java东西都困扰着我.谁能指出我正确的方向?

解决方法:

这是因为您尝试重新启动终止的线程,因此.IsAlive()返回false.如果您用Google搜索LunarLander错误或非法线程之类的东西,有很多关于此问题的文档.

我发现一种可能的解决方法是:

    public voID surfaceCreated(SurfaceHolder holder) {        if (thread.getState() == Thread.State.TERMINATED) {            thread = new CascadeThread(getHolder(), getContext(), getHandler());            thread.setRunning(true);            thread.start();        }        else {            thread.setRunning(true);            thread.start();        }

您可以找到完整的文档here

总结

以上是内存溢出为你收集整理的另一个活动已获得关注后返回SurfaceView全部内容,希望文章能够帮你解决另一个活动已获得关注后返回SurfaceView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1083344.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存