I have a situation in an Android app where I want to start a network activity (sending out some data) which should run every second. I achieve this as follows:
In the onCreate()
I have the code:
tv = new TextView(this);
tv.postDelayed(sendData, 1000);
The sendData()
function:
Handler handler = new Handler();
private Runnable sendData=new Runnable(){
public void run(){
try {
//prepare and send the data here..
handler.removeCallbacks(sendData);
handler.postDelayed(sendData, 1000);
}
catch (Exception e) {
e.printStackTrace();
}
}
};
The problem come in like this: When user presses the back buttons and app comes out (UI disappears) the sendData()
function still gets executed which is what I want. Now when user re-starts the app, my onCreate()
gets called again and I get sendData()
invoked twice a second. It goes on like that. Every time user comes out and starts again, one more sendData()
per second happens.
What am I doing wrong? Is it my new Handler()
creating problem? What is the best way to handle this? I want one sendData()
call per second until user quits the app (form application manager).
Why don't you create service and put logic in onCreate()
. In this case even if you press back button service will keep on executing. and once you enter into application it will not call
onCreate()
again. Rather it will call onStart()