Периодически запускайте асинтаск в Android

Здесь я должен периодически запускать асинтаск, скажем, с интервалом в каждые 5 секунд. Ниже мой код,

//вызываем асинтаск с интервалом в 5 секунд

    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 секунд

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 секунд. Теперь, когда я закрываю приложение и снова перезапускаю, появляется два всплывающих сообщения (это означает, что я могу сказать, что создается второй экземпляр класса), и новые всплывающие сообщения создаются каждый раз, когда я перезапускаю приложение. Мне нужно только одно всплывающее сообщение (первое) каждый раз, когда я перезапускаю приложение. Как я могу это сделать?


person Looking Forward    schedule 04.12.2013    source источник
comment
Вам нужно, чтобы эта задача выполнялась только тогда, когда ваше приложение видно или всегда, в этом последнем случае мой совет — использовать службу.   -  person gipi    schedule 04.12.2013
comment
@gipi: можешь привести несколько примеров???   -  person Looking Forward    schedule 04.12.2013
comment
Братан, вместо использования службы вы можете использовать AlaramManager..   -  person bGorle    schedule 04.12.2013
comment
@AnilBhatiya посмотрите на это github.com/gipi/Android-keep-alive/blob/master/src/org/devtcg/ похоже на то, что вы хотите сделать   -  person gipi    schedule 04.12.2013


Ответы (3)


Вы должны использовать службу с диспетчером тревог вместо задачи таймера.

проверьте это

и этот< /а>

person Praveen Sharma    schedule 04.12.2013

Просто вы можете отменить AsyncTask, когда в методе Activity onPause()

person GOLDEE    schedule 04.12.2013

Попробуйте явно отменить таймер где-нибудь внутри onDestroy() или onPause(), используя timer.cancel(true).

person P. Haller    schedule 04.12.2013