use*_*468 1 android instance-variables instance android-asynctask
我有一个在一个活动上调用的AsyncTask(在一个单独的文件中).当我实例化AsyncTask时,我将活动作为参数发送.如何从AsyncTask的onPostExecute方法访问acitivity的实例变量?
谢谢!
Jos*_*arl 10
传递一个活动,或者当你必须小心Context到AsyncTask这不是一个内(非静态)类的活动-这是因为在这种情况下,寿命Activity/ Context和AsyncTask是不同的,如果你坚持到Activity/ Context比你应该更长的时间会导致内存泄漏.
而不是保持活动或活动上下文本身,AsyncTask你应该保持 WeakReference活动.这将确保在需要时垃圾收集器(GC)可以回收与Activity关联的内存.
public class MyTask extends AsyncTask<..., ..., ...> {
private WeakReference<MyActivity> mParentActivity = null;
public MyTask(MyActivity parentActivity) {
mParentActivity = new WeakReference<MyActivity>(parentActivity);
}
@Override
public ... doInBackground(... params) {
// do some stuff
// now we do something that requires the context
if (mParentActivity.get() != null) {
// the WeakReference is still valid and hasn't been reclaimed
// by the GC
final MyActivity parentActivity = mParentActivity.get();
parentActivity.doSomething();
}
// return result
}
}
Run Code Online (Sandbox Code Playgroud)
传递时Context总是尝试尽可能使用ApplicationContext,因为这是最长寿的上下文.
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |