Runnable不会运行

时间:2013-10-08 11:53:38

标签: java android multithreading

我试图检查我的用户何时停止滚动。

对此我使用这种方法:

commentsLayout.setScrollViewListener(new ScrollViewListener() {

            @Override
            public void onScrollChanged(WallScrollView scrollView, int x, int y,
                    int oldx, int oldy) {
                // TODO Auto-generated method stub

                oldCommentsYDiefference = oldy;
                commentsYDiefference = y;

                             //do something
}

我注意到当用户停止滚动时,oldCommentsYDiefferencecommentsYDiefference之间的差异始终为1.

因此,为了检查我的用户何时停止滚动我想到创建一个线程,通过使用此代码检查这两个数字的差异是1:

public void checkFromScrolling()
    {
        new Thread(new Runnable() {
            @Override
            public void run() {

                Log.i("commentsYDiefference", commentsYDiefference+"");
                Log.i("oldCommentsYDiefference", oldCommentsYDiefference+"");

                if(commentsYDiefference - oldCommentsYDiefference == 1 || oldCommentsYDiefference - commentsYDiefference == 1)
                {

                    if(checkWallScroll)
                        new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {

                                         //do things

                            oldCommentsYDiefference = commentsYDiefference;

                            checkWallScroll = true;

                            }
                    }, 2000);

                    checkWallScroll = false;
                }
            }
        }).start();
    }

我在onCreate中打电话给checkFromScrolling()

我的问题是Runnable只运行一次而不是一直运行。 我知道这是因为我的日志报告中只有一个电话

Log.i("commentsYDiefference", commentsYDiefference+"");
Log.i("oldCommentsYDiefference", oldCommentsYDiefference+"");

如何在活动打开时让Runnable一直运行?

1 个答案:

答案 0 :(得分:0)

您可以添加一个while循环检查布尔变量(keepRunning)是否为true。然后,您必须在活动结束前将其设置为false。