此问题可能之前已经提出过,但我通过搜索无法找到它。
我在我的android应用程序中实现了一个活动,并且在此活动中也使用了Asynctask类。我尝试从Asynctask(doInBackgroung)对我的布局进行一些更改,因此我从上面提到的Asynctask调用了runOnUiThread。这可以正常工作,但是一旦我移动到另一个活动并再次返回此活动,布局上的更改就不会再发生了。
值得一提的是,在移动到下一个活动时我调用asynctask.cancel(true)
并在移回包含提到的Asynctask的活动时重建该asynctask。
请指导我如何处理这个问题。
答案 0 :(得分:0)
如果不查看代码就很难说,但我建议您不要在asyncTask中调用runOnUiThread()
。相反,在AsyncTask类中创建一个接口,并在构造AsyncTask类时传入实现接口的活动。然后在onPostExecute()
内检查你的监听器(即实现你的接口的活动)是否为null并在该接口上调用一个方法 - 然后在活动内的实现方法内,在正确的线程上处理还可以检查您是否仍然拥有正确的UI元素,或者根据需要通过ID查找它们。
public class MyActivity extends Activity implements OnAsyncFinishedListener {
<... activity stuff ...>
@Override
public void onAsyncFinished() {
// do stuff with your activity ui
}
}
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private OnAsyncFinishedListener mListener;
public static interface OnAsyncFinishedListener {
void onAsyncFinished();
}
public MyAsyncTask(OnAsyncFinishedListener listener) {
mListener = listener
}
<... async task stuff ...>
@Override
protected void onPostExecute(Void void) {
if (mListener != null) {
mListener.onAsyncFinished();
}
}
}