我正在尝试在第二个线程中向自身添加一个 int 并且我的主线程中没有任何变化

Posted

技术标签:

【中文标题】我正在尝试在第二个线程中向自身添加一个 int 并且我的主线程中没有任何变化【英文标题】:I'm trying to add an int to itself in a second thread and nothing is changing in my main thread 【发布时间】:2013-03-09 21:32:54 【问题描述】:

我正在制作动态壁纸。而且我在尝试对我的精灵帧更改进行多线程处理时遇到了问题。我有一个更新方法和一个绘制方法

public void update() 

        try 
            Thread.sleep(500);
         catch (InterruptedException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
        currentFrame = ++currentFrame % 2;

    

    public void Draw(Canvas c, int sx, int sy)
        update();
        x = sx;
        y = sy;
        int srcX =  currentFrame * width;
        int srcY = 0;
        Rect src = new Rect(srcX,srcY,srcX+width,srcY+height);
        Rect dst = new Rect(x,y,x+width,y+height);
        c.drawBitmap(b, src, dst, null);

我尝试过上课

public class SecondThread extends Thread
            public void run()
                seaweed.update();

            
            

它在自己的线程中运行更新,因此它们可以在不同的时间长度内休眠。一个人睡 50 人,另一个人睡 500 人。如果将 SecondThread 类放在 spirte 类中,它只会设置在第一帧上,如果我放入我的壁纸引擎类并尝试启动它,它会像一个步骤一样然后崩溃。我在这里做错了什么?

【问题讨论】:

【参考方案1】:

尝试在更新 int 后在您的视图上调用 postInvalidate()。比如:

public void update() 

    try 
        Thread.sleep(500);
     catch (InterruptedException e) 
        e.printStackTrace();
    
    currentFrame = ++currentFrame % 2;
    YourViewClass.this.postInvalidate();


public void Draw(Canvas c, int sx, int sy)
    update();
    x = sx;
    y = sy;
    int srcX =  currentFrame * width;
    int srcY = 0;
    Rect src = new Rect(srcX,srcY,srcX+width,srcY+height);
    Rect dst = new Rect(x,y,x+width,y+height);
    c.drawBitmap(b, src, dst, null);

【讨论】:

表示我的壁纸引擎无法解析为这种类型。

以上是关于我正在尝试在第二个线程中向自身添加一个 int 并且我的主线程中没有任何变化的主要内容,如果未能解决你的问题,请参考以下文章

菜单栏未显示在第二个窗口上

onClick 中的第二个意图在第一个之前执行

在 AlertDialog 中向 LinearLayout 添加多行

c++ 当在一个线程中写入并在第二个线程中读取同一个对象时会发生啥? (它安全吗?)[重复]

在第二个线程中显示图像,OpenCV?

在 ios 6 中向第二个动态单元格添加单独的标识符?