定期呼叫网络,仅在前台进行任何更新

时间:2014-09-21 06:41:06

标签: android listview android-asynctask hang periodic-task

我想定期检查每30秒进行一次网络呼叫的更新并相应地更新列表视图,只有当我的屏幕在前台时(因此不是来自服务)。我正在做的是 -

private void refreshPeriodically()
{
    final Handler handler = new Handler();
    Timer timer = new Timer();
    TimerTask doAsynchronousTask = new TimerTask() {       
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {       
                    try {


                        new callToMyAsyncTask().execute(context); 

                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                    }
                }
            });
        }
    };
    timer.schedule(doAsynchronousTask, 0, 30*1000); //execute in every 30 sec
}

但是,滚动时会挂起我的列表。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

你不应该使用处理程序。当您致电handler.post()时,它将在UI主题上运行,因此您的列表将会冻结。在callToMyAsyncTask中的run方法中启动新的TimerTask,而不使用处理程序,当您的活动不在前台时,您可以调用timer.cancel()

此外,我认为您应该使用scheduleAtFixedRate代替schedule

但是我认为如果没有服务,你可能会遇到一些问题。当您取消定时器时,它不会取消当前callToMyAsyncTask,并且当它呼叫onPostExecute活动不再可用时。但我不知道它会不会崩溃。