java - 由于后台线程,UI 无法顺利更新

标签 java android multithreading

我正在编写一个 Android 游戏,这就是我所拥有的:

游戏循环实现为:

我制作了一个扩展 View 的自定义 View 。然后在我的 onDraw() 方法中,我调用 invalidate();

主要 Activity :

在这里,我创建了一个自定义 View 的实例,并使用 setContentView() 将其设置为我的当前 View 。 我还使用 OnTouch() 方法来获取触摸事件

一切都工作顺利,直到我这样做:

我创建了一个新类 Graphthread,并在 run 方法中创建了一个循环。

public class Graphthread extends Thread
   {
    @Override
    public void run() { 
         while(true)
       {

        }
    }
     }

然后我在我的 MainActivity 中创建了一个实例

Graphthread gth = new Graphthread();

并在我的 onCreate 方法中使用了 gth.start() 。

现在发生了以下情况:

游戏运行不顺畅。或者我应该说它就像..运行一段时间..卡住几毫秒...再次运行...再次卡住等等。

发生了什么?

最佳答案

像这样的轻微抖动听起来像是垃圾收集。如果您的后台线程(或其他线程)消耗大量内存,GC 可能需要比预期更频繁地运行。这会导致如您所描述的短暂的紧张。

关于java - 由于后台线程,UI 无法顺利更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996743/

相关文章:

java - 扫描线:寻找交点

java - 关于 ImageViewer.gwt.xml 的问题

java - 如何在 android 中使用 "dynamic"视频文件填充 ListView ?

android - 将 InstrumentationTestRunner 和 AndroidJUnitRunner 与 Robotium 和 Espresso 一起使用

multithreading - 在.NET中启动 sleep 线程

java - 使用java的getClasses()方法

java - JMS 的示例代码和环境设置

android - 图像识别后如何在vuforia sdk ImageTarget中显示布局而不是茶壶模型

perl - Perl 线程与内核线程具有相同的优点吗?

c++ - 如何使用 boost::thread_group 使用多客户端服务器?