如果不查看代碼很難說,但我建議您不要在asyncTask中調用runOnUiThread()
。相反,在AsyncTask類中創建一個接口,並在構建AsyncTask類時傳入實現該接口的活動。然後在onPostExecute()
裏檢查你的監聽器(即實現你的接口的活動)是否爲空,並在該接口上調用一個方法 - 這將在活動內部的實現方法中,在正確的線程中進行處理,您仍然擁有正確的用戶界面元素,或者在需要時通過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();
}
}
}
當您返回到原始任務時,您是否調用'.execute()'? https://github.com/xxv/android-lifecycle此鏈接將幫助您瞭解何時應重新實例化對象,如'AsyncTasks' – ElliotM
當您在活動上調用setContentView()時,它將重新加載在xml中忽略的佈局你對UI的改變,是你的問題嗎? – Nanoc
我在'onCreate()'中調用'.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,param);'在最初的活動中。我嘗試過'.execute',但它不成功。 – mohammad