如何在android中每隔2分钟从DB中获取数据?

如何在android中每隔2分钟从DB中获取数据?,android,database,Android,Database,我开发了一个简单的android应用程序,能够通过http请求从数据库发布和获取信息,并使用AsyncTask完成这项工作。我的问题是,我是否想每5分钟从数据库中轮询一次信息,或者检查是否有任何新数据已发布到数据库中?我如何在android中做到这一点 退房 3000000毫秒=5分钟 CountDownTimer chkDb= new CountDownTimer(300000, 1000) { public void onTick(long millisUntilF

我开发了一个简单的android应用程序,能够通过http请求从数据库发布和获取信息,并使用AsyncTask完成这项工作。我的问题是,我是否想每5分钟从数据库中轮询一次信息,或者检查是否有任何新数据已发布到数据库中?我如何在android中做到这一点 退房

3000000毫秒=5分钟

 CountDownTimer chkDb=   new CountDownTimer(300000, 1000) {

         public void onTick(long millisUntilFinished) {
             mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
         }

         public void onFinish() {
             mTextField.setText("done!");
             //code for db check 
             chkDb.start();//start again after 5 min
         }
      }.start();

使用


我不认为每5分钟轮询一次DB是一个好的解决方案。这是浪费资源

而不是这样,考虑使用一些机制来通知你,当数据库中的某些东西发生变化时,你的UI可以正常刷新。 例如,在一些项目中,我曾经在DB中插入新项时发送事件。我的片段订阅了一个默认的总线,这样当某些内容发生变化时,它们就会知道

优点:性能。该应用程序只有在必要时才能工作

缺点:嗯,其实不多。简单的解决方法是说:“好的,有些东西已经改变了。让我们抛出UI中显示的所有当前信息,并对DB进行新的查询!”。但是,nice的解决方案是:“好的,有些东西已经改变了。什么已经改变了,我怎样才能将新信息添加到用户界面?”


但这取决于应用程序上下文;)

这将与asyncTask一起工作。我在发送http get请求时使用asyncTask,在执行短操作时应使用read async当你说CallYourMethod时这就是我执行http get请求的地方?是的,请使用另一个方法执行所有http请求或数据库检查,并在countdowntimer或TimerTask中调用该方法谢谢,我还看到stopTask方法,它什么时候被调用?当你想在中间中断计时器时,比如取消计时器,但在你的情况下,它看起来没有用。有趣的是,以前从未使用过的otto将查看它。你有关于如何实现OTT的教程或示例吗?其实很简单。你可以查看一些信息,但一旦你开始使用它,你就会学得很快
private TimerTask mTimerTask;
private Timer t = new Timer();

public void doTimerTask() {

        mTimerTask = new TimerTask() {
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        callYourMethodHere();
                        Log.i("TIMER", "TimerTask run");
                    }
                });
            }
        };

        // public void schedule (TimerTask task, long delay, long period)
        t.schedule(mTimerTask, 500, 1000); //

    }

    public void stopTask() {

        if (mTimerTask != null) {
            Log.i("TIMER", "timer canceled");
            mTimerTask.cancel();
        }

    }


task -- This is the task to be scheduled.

delay -- This is the delay in milliseconds before task is to be executed.

period -- This is the time in milliseconds between successive task executions.