I am running a heavy operation on a thread, which is invoked on button click. To prevent user from clicking that button again, I am simply checking if thread.isAlive()
, which runs fine as long as I am in the current activity. When I press backpress and come again to this activity, thread.isAlive()
returns false and start executing that intensive function again because I am creating new thread in onCreate. How can I solve this? My code as under
Thread thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_backup_restore);
Backup backupobj= new Backup();
thread= new Thread (new BackupThread(backupobj));
button.setOnClickListener(v -> {
if(posts.size()>0) {
if (!thread.isAlive()) {
thread.start();
}
else {
Toast toast = Toast.makeText(getApplicationContext(), "Backup in Progress" ,
Toast.LENGTH_LONG);
toast.show();
}
}
});}
BackupThread class
class BackupThread extends Thread {
BackupRestore.Backup backup;
BackupThread(BackupRestore.Backup obj)
{
this.backup=obj;
}
@Override
public void run() {
backup.overallbackup();
backup.dbbackup();
backup.deletetempfolder();
}
To be precise,
Thread.isAlive() returns true if the thread has been started (may not yet be running) but has not yet completed its run method.
Thread.getState() returns the exact state of the thread.