Touchevent中的android线程/处理程序

时间:2011-10-05 23:29:40

标签: android multithreading graphics ontouchevent

这个touchevent给了我一个完整的问题列表..这是纯粹的图形化,我在从UI接收信息的同时运行另一个线程。

无论如何,当你的手指按在屏幕上时,我正试图运行一种方法。

所以我只是简化我的编码ALOT。

// global up top
boolean finderdown;
//... lots of code
if (event.getAction() == MotionEvent.ACTION_DOWN) 
{ 
    HoldingDown(event.getX(), event.getY(), heightf, widthf);
}

if (event.getAction() == MotionEvent.ACTION_UP) 
{ 
    HodlingDown(event.getX(), event.getY(), heightf, widthf);
    fingerdown = false
}

//.. lots of code


public HoldingDown Click(final float x, final float y, final float height, final float width)
{
    Thread myThread = new Thread() {
        @Override
        public void run() {
            while(fingerdown==true);
            {
                // class object = new class() in the activity area
                object.function(x ,y , height, width);
            }
        }
    };
    myThread.start();
}

// manages Threads messages
private Handler threadHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
           // handle message
    }
};

我运行这样的东西,似乎加快了我的另一个线程?

1 个答案:

答案 0 :(得分:0)

根据您的代码,您每次触摸屏幕时都会创建一个新主题,并且fingerdown中的MotionEvent.ACTION_UPx, y , width, height,但您认为它是真的。

我建议你将fingerdown作为实例变量,并通过在事件代码中使boolean var = false; //instance variable to check if thread has started running for first time int x, y, width, height; // variables as instance variables boolean fingerdown; Thread myThread = new Thread() { @Override public void run() { while(fingerdown==true); { // class object = new class() in the activity area object.function(this.x ,this.y , this.height, this.width); } } }; if (event.getAction() == MotionEvent.ACTION_DOWN) { this.x = event.getX(); this.y = event.getY(); this.width = widthf; this.height = heightf; fingerdown = true; if(!var){ var = true; myThread.start(); } } if (event.getAction() == MotionEvent.ACTION_UP) { fingerdown = false } 为true或false来控制线程内代码的执行。

尝试使用以下代码

{{1}}

因此,不是每次都在触摸事件中创建新线程,而是只使布尔值为true和false,并控制代码的执行。