Изпълнявайте периодично asynctask в android

Тук трябва периодично да изпълнявам asynctask, например на всеки 5 секунди. По-долу е моят код,

// извикване на asynctask на интервал от 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*



}

// извикване на asynctask на интервал от 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 When in Activities onPause().

person GOLDEE    schedule 04.12.2013

Опитайте изрично да отмените таймера навсякъде в onDestroy() или onPause(), като използвате timer.cancel(true).

person P. Haller    schedule 04.12.2013