Android设备在屏幕上绘图时不执行主线程(onTouchEvent)

Android设备在屏幕上绘图时不执行主线程(onTouchEvent),android,performance,touch-event,Android,Performance,Touch Event,每个人? 我正在测试一些触摸板,它必须与我们公司的安卓设备一起工作。我实现了一些绘图示例并在android设备上运行。我实现了许多绘图示例。 当我在android手机或其他设备上运行已实现的APK时,它们工作得非常好。 但当在我们的android设备上运行时,它会在笔离开键盘后在屏幕上画图。 这是图纸样本之一的一部分 public SignatureView(Context context) { super(context); paint.setAntiAlias(true);

每个人? 我正在测试一些触摸板,它必须与我们公司的安卓设备一起工作。我实现了一些绘图示例并在android设备上运行。我实现了许多绘图示例。 当我在android手机或其他设备上运行已实现的APK时,它们工作得非常好。 但当在我们的android设备上运行时,它会在笔离开键盘后在屏幕上画图。 这是图纸样本之一的一部分

public SignatureView(Context context) {
    super(context);
    paint.setAntiAlias(true);
    paint.setColor(Color.BLACK);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setStrokeWidth(5.0f);
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawPath(path, paint);
    debug("OnDraw");
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float eventX = event.getX();
    float eventY = event.getY();

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        debug("ACTION_DOWN");
        path.moveTo(eventX, eventY);
        lastTouchX = eventX;
        lastTouchY = eventY;
        return true;
    case MotionEvent.ACTION_MOVE:
        debug("ACTION_MOVE");
        resetDirtyRect(eventX, eventY);
        path.lineTo(eventX, eventY);
        break;
    case MotionEvent.ACTION_UP:
        debug("ACTION_UP");
    break;
    default:
        return false;
    }
    invalidate(
            (int) (dirtyRect.left-halfStrokeWidth),
            (int) (dirtyRect.top-halfStrokeWidth),
            (int) (dirtyRect.right+halfStrokeWidth),
            (int) (dirtyRect.bottom+halfStrokeWidth));
    lastTouchX = eventX;
    lastTouchY = eventY;
    return true;
你可以在日志上看到,它首先在屏幕上画图,但之后它什么也没做,在笔离开后,一组事件同时发生,然后它在屏幕上画图。我并没有制作视频,但若你们看,这就像我画画时什么也并没有发生一样,但在画笔离开后,事件同时发生了


你认为问题出在哪里?司机或标志牌或设备。我不知道设备的真正规格,但我听说设备规格像三星galaxy S1

onTouchEvent未在主线程上执行。那就给我打电话吧

   activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // your drawing code here 
            resetDirtyRect(eventX, eventY);
            path.lineTo(eventX, eventY);
        }
    });
从听者的内部