如何在屏幕旋轉期間處理AsyncTask?我讀了很多關于如何保存我的實例狀態或如何在屏幕旋轉期間處理我的活動被破壞的內容。似乎有很多可能性,但我還沒有想出哪一個最適合檢索AsyncTask的結果。我有一些AsyncTasks只是再次啟動并調用isFinishing()活動的方法,如果活動正在完成,他們不會更新任何東西。問題是我有一個任務對Web服務發出請求失敗或成功的任務,并且重新啟動任務會導致用戶的經濟損失。你怎么解決這個問題?可能的解決方案有哪些優點或缺點?
3 回答
GCT1015
TA貢獻1827條經驗 獲得超4個贊
我的第一個建議是確保您確實需要在屏幕旋轉時重置您的活動(默認行為)。每次我遇到旋轉問題時,我都會<activity>在AndroidManifest.xml中將此屬性添加到我的標簽中,并且很好。
android:configChanges="keyboardHidden|orientation"
它看起來很奇怪,但是onConfigurationChanged()如果你不提供它,它會把它交給你的方法,它除了重新測量布局之外什么也沒做什么,這似乎是一種在大多數時候處理旋轉的完美的方法。
紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
@Overrideprotected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
final AddTask task = mAddTask;
if (task != null && task.getStatus() != UserTask.Status.FINISHED) {
final String bookId = task.getBookId();
task.cancel(true);
if (bookId != null) {
outState.putBoolean(STATE_ADD_IN_PROGRESS, true);
outState.putString(STATE_ADD_BOOK, bookId);
}
mAddTask = null;
}}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState.getBoolean(STATE_ADD_IN_PROGRESS)) {
final String id = savedInstanceState.getString(STATE_ADD_BOOK);
if (!BooksManager.bookExists(getContentResolver(), id)) {
mAddTask = (AddTask) new AddTask().execute(id);
}
}}- 3 回答
- 0 關注
- 419 瀏覽
添加回答
舉報
0/150
提交
取消
