【问题标题】:android thread reset安卓线程重置
【发布时间】:2012-10-25 03:27:29
【问题描述】:

我的代码是:

public class EventDialog2 extends Dialog implements OnTouchListener{

    TextView textv;
    Context con;
    Thread t;
    int flag=0;
    public EventDialog2(Context context, int dialogslideanim) {
        super(context, dialogslideanim);
        con = context;

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog2);
        getWindow().setGravity(Gravity.BOTTOM);
        timing();
        LinearLayout line = (LinearLayout) findViewById(R.id.linear2);
        line.setOnTouchListener(this);
        line.removeAllViews();
        for (int i = 0; i < 15; i++) {
            TextView tv = new TextView(con);
            tv.setText("TestProcess " + i);
            tv.setTextColor(Color.BLACK);
            line.addView(tv);

        }

    }


    private void timing() {
        // TODO Auto-generated method stub
        if(flag==1){
        t.stop();

            flag=0;
        }

        t = new Thread(new Runnable() {

            public void run() {
                try {

                    t.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();

                }


                dismiss();

            }
        });
        t.start();
    }


    public boolean onTouch(View v, MotionEvent event) {
        System.out.println("touched");
        flag=1;
        timing();
        return false;
    }
}

这里的线程运行良好,因为它会在 3 秒后休眠。但是我需要当我们在对话框中触摸时线程应该得到 reset 并且应该在触摸后 3 秒后休眠。请帮我。 谢谢

【问题讨论】:

  • 我不明白。除了让它进入睡眠状态之外,您似乎没有在线程上做任何事情。你想在 3 秒后发生什么?
  • 3 秒后,对话框将关闭。但是我需要如果我们触摸对话框,它应该在触摸被释放后仅在 3 秒后关闭。
  • 现在是什么情况?有什么错误吗?还是触摸不起作用?我建议使用 log 而不是这个 System.out.println("touched");
  • 没有错误。触摸也被检测到。我只想重置睡眠时间。

标签: android multithreading android-layout reset


【解决方案1】:

在调用dismiss()之前,您需要测试自上次触摸后是否已经过3秒;以下是我的做法。

public class EventDialog2 extends Dialog implements OnTouchListener{

    TextView textv;
    Context con;
    Thread t;
    int flag=0;
    Long lastTouchHappenedAt = System.currentTimeMillis();
    Handler handle = new Handler();

    public EventDialog2(Context context, int dialogslideanim) {
        super(context, dialogslideanim);
        con = context;

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog2);
        getWindow().setGravity(Gravity.BOTTOM);
        handle.postDelayed(delayDismis, 3000);

        LinearLayout line = (LinearLayout) findViewById(R.id.linear2);
        line.setOnTouchListener(this);
        line.removeAllViews();
        for (int i = 0; i < 15; i++) {
            TextView tv = new TextView(con);
            tv.setText("TestProcess " + i);
            tv.setTextColor(Color.BLACK);
            line.addView(tv);

        }

    }


    private Runnable delayDismis = new Runnable() {
        public void run() {
                if(System.currentTimeMillis() - lastTouchHappenedAt >= 3000){
                    dismiss();
                    {
            }
        };


    public boolean onTouch(View v, MotionEvent event) {
        System.out.println("touched");
        flag=1;
        lastTouchHappenedAt = System.currentTimeMillis();
        handle.postDelayed(delayDismis, 3000);
        return false;
    }
}

【讨论】:

  • 是的,它运行良好,对话框显示并在 3 秒后关闭。当触摸发生时线程也会刷新。但是如果用户继续触摸屏幕,我想保持对话框打开,现在它会即使用户正在使用对话框也会关闭。我尝试在 OnTouch>Action_Move 中实现它。但是它的对话框扩展类Action_move没有检测到。有没有办法在对话框扩展类中检测Action_UP,Action_Move,Action_Down。
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多