android - Check if asynctask with Progress Dialog is finished in non activity class -


i have created non activity java class doing same calculation different activities. class has asynctask progress dialog in it. in cases calculation not last operation of activity , goes fine, when progress dialog goes lost.

example:

myjavaclass docalculations= new myjavaclass (someactivity.this);  docalculations.do(); //<------ method has asysctask progress dialog  finish(); 

result:

java.lang.illegalargumentexception: view=com.android.internal.policy.impl.phonewindow$decorview{2bbf820e v.e..... r......d 0,0-1026,483} not attached window manager 

how can wait asynctask finish , finish activity?


additional question: using asynctask in non activity class bad practice ?

if want keep activity active until asynctask has finished job, can define callback method in activity gets called when task has finished , can react appropriately:

in activity:

private boolean finishaftercurrenttask = false;  public void ontaskfinished() {     if (finishaftercurrenttask) { // set true when running last task         finish();     } } 

in asynctask:

protected void onpostexecute(object result) {     progressdialog.dismiss();     activity.ontaskfinished(); } 

i'm assuming you're keeping reference activity in myjavaclass. in case you're calling asynctask non-ui thread, should run callback (and methods involving dialog) via activity.runonuithread().

as second question - if use asynctask in class methods can called thread other ui thread, it's necessary use runonuithread() perform operations on ui, such changing contents of view or showing/hiding dialog, beause onpreexecute() , onpostexecute() called same thread execute().

on other hand, if start task inside 1 of ui callbacks, guaranteed run on ui thread, don't need worry that.


Comments

Popular posts from this blog

qt - Using float or double for own QML classes -

Create Outlook appointment via C# .Net -

ios - Swift Array Resetting Itself -