How to stop Handler in Android
You can use this to stop that runnable
handler.removeCallbacks(calendarUpdater);
removeCallbacks(Runnable r) :Remove any pending posts of Runnable r
that are in the message queue.
Edit
You can organize your code like this
In your onCreate()
of MainActivity.java
Handler handler = new Handler();
refreshCalendar()
//outside oncreate
public void refreshCalendar() {
calAdapter.refreshDays();
calAdapter.notifyDataSetChanged();
startRepeatingTask();
calTitle.setText(android.text.format.DateFormat.format("MMMM yyyy", cal));
}
public Runnable calendarUpdater = new Runnable() {
@Override
public void run() {
items.clear();
allData = new ArrayList<HashMap<String,String>>();
allData.clear();
allData = db.showAllEvents();
String currentDate = (String)android.text.format.DateFormat.format("MM/yyyy", cal);
for(int i=0; i<allData.size(); i++)
{
String date[] = allData.get(i).get("date").split("/");
String md[] = currentDate.split("/");
if(date[1].equals(md[0]) && date[2].equals(md[1]))
{
items.add(date[0]);
System.out.println("dates: "+date[0]);
}
}
calAdapter.setItems(items);
calAdapter.notifyDataSetChanged();
handler.postDelayed(calendarUpdater,5000); // 5 seconds
}
};
void startRepeatingTask()
{
calendarUpdater.run();
}
void stopRepeatingTask()
{
handler.removeCallbacks(calendarUpdater);
}
Now you can just call startRepeatingTask()
to posting message and to stop use stopRepeatingTask()
Inherited from following link
Repeat a task with a time delay?
Handler has nothing to be stopped or started. It's just a gateway to post Messages and Runnables onto thread Queue. In your case you are posting a Runnable, which will be run on Handler's thread. You have to stop that Runnable. So, put a check in that for
loop to break it.
You can also use removeCallbacks(Runnable r)
on Handler
to cancel posted Runnable
's. But this won't remove those Runnable
's which are already running.
Try below line,
handler.removeMessages(0);
Remove any pending posts of messages with code what
that are in the message queue.