在android中定期运行asynctask

时间:2013-12-04 10:23:11

标签: android android-asynctask toast

在这里,我要每隔5秒钟定期运行一次asynctask。以下是我的代码,

//以5秒的间隔调用asynctask

    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 PerformBackgroundTask().execute();

                    } 
                    catch (Exception e) 
                    {

                    }
                }
            });
        }
    };
    timer.schedule(doAsynchronousTask, 0, 5000); //execute in every 5s*



}

//以5秒的间隔调用asynctask

public class PerformBackgroundTask extends AsyncTask<Void, Void, Void>
{


    @Override
    protected void onPreExecute() {
        super.onPreExecute();           
    }

    @Override
    protected Void doInBackground(Void... params) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "Call at interval of 5 seconds" + "" + count , 500).show();

            }
        });
        count++;
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

    }
}

当我运行我的应用程序时,它第一次完全运行,意味着每隔5秒就有一次toast消息。现在,当我关闭应用程序并重新启动时,有两个Toast消息(意味着我可以说,创建了第二个类实例),每次重新启动应用程序时都会创建新的Toast消息。每次重新启动应用程序时,我只想要一个Toast消息(第一个)。我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

您应该使用带有警报管理器的服务而不是计时器任务。

检查this one

和   this one

答案 1 :(得分:2)

只需在活动onPause()方法

中取消AsyncTask即可

答案 2 :(得分:0)

尝试使用timer.cancel(true)在onDestroy()或onPause()内的任何位置显式取消Timer。