i need write asynctask
reference on new object instances after screen rotation. wrote callback
interface , in juketask
declared weak reference field. juketask
:
public abstract class juketask<params, progress, result> extends asynctask<params, progress, result> { private weakreference<callback<progress, result>> mwrcallback; public void setcallback(callback<progress, result> callback) { mwrcallback = new weakreference<>(callback); } @override protected void onpreexecute() { callback<progress, result> callback = mwrcallback.get(); if(callback != null) { callback.onpreexecute(); } } @suppresswarnings("unchecked") @override protected void onprogressupdate(progress... values) { callback<progress, result> callback = mwrcallback.get(); if(callback != null) { callback.onprogressupdate(values); } } @override protected void onpostexecute(result result) { callback<progress, result> callback = mwrcallback.get(); if(callback != null) { callback.onpostexecute(result); } } public interface callback<p, r> { void onpreexecute(); @suppresswarnings("unchecked") void onprogressupdate(p... values); void onpostexecute(r result); } }
example of using:
public class testactivity extends appcompatactivity implements juketask.callback<integer, integer> { private static final string tag = testactivity.class.getsimplename(); private textview mtextview; juketask<void, integer, integer> mtask; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); mtextview = new textview(this); setcontentview(mtextview); mtextview.settext("started"); //... if(mtask == null) { mtextview.settext("task null!"); mtask = new juketask<void, integer, integer>() { @override protected integer doinbackground(void[] params) { int = 0; (; < 100000; ++i) { log.d(tag, "tick " + i); } //do smth return i; } }; mtask.setcallback(this); mtask.execute(); } } @override public void onpreexecute() { } @override public void onprogressupdate(integer... values) { } @override public void onpostexecute(integer result) { mtextview.settext(result.tostring()); } }
should use weakreference
in juketask
callback
not block garbage collector?
how save reference juketask? because after screen rotation re-executes juketask
.
Comments
Post a Comment