我有一個同步問題。我已經搜索並找不到與我的條件相同的問題。指針是受歡迎的。onActivityResult調用太早
Eclipse 4.1.1上的Android 4.1.2
我有兩個活動;我們稱之爲ListActivity和DetailActivity。在一個按鈕上按ListActivity,我啓動DetailActivity。當用戶對DetailActivity中的數據進行更改,然後單擊後退按鈕時,我想要做兩件事。首先,如果髒標記爲真,我想保存對數據庫的更改。其次,我想將一個Intent返回給ListActivity的onActivityResult()方法。
問題是時機問題之一。由於我想進行數據庫更新,因此我認爲這是在DetailActivity的onStop()方法中執行此操作的最佳實踐。在更新數據庫之後,我設置了Intent並調用DetailActivity中的setReult()方法。
_resultIntent = new Intent();
_resultIntent.putExtra(ListActivity .DETAIL_RESULT, _currentData);
Log.d("ListActivity.setUpReturn()", "checkpoint");
setResult(Activity.RESULT_OK, _resultIntent);
在我有機會設置結果之前調用ListActivity的onActivityResult()方法。我把記錄呼叫整個顯示內容發生如下:
1)用戶在DetailActivity並改變一些數據的髒標誌設置爲true。
2)用戶點擊系統返回按鈕。
3)DetailActivity從屏幕上消失。
4)ListActivity重新出現。
5)Log注意到ListActivity的onActivityResult(),onRestart(),onStart()和onResume()方法按此順序執行
6)記錄其他一些內容。
7)Log FINALLY注意到DetailActiviy的onStop()方法執行。
這意味着,到時候我正在更新數據庫,並建立結果的意圖,調用活動已經通過了使用它的點。
我寧願不經常更新數據庫。我寧願把它放到像最佳實踐所說的onStop()方法中,但我不知道如何解決時間問題。有什麼建議麼?我做了什麼明顯錯誤?
PravinCG, 這正是我一直在尋找的答案。這讓我可以在系統知道用戶想要關閉此活動之前完成數據庫工作。作爲一個好處,它只發生在用戶點擊後退按鈕而不是當活動停止時。這意味着,如果用戶改變方向或打電話並且活動停止甚至銷燬,則可以通過正常方式管理狀態,但只有在用戶明確解除活動時纔會將更改提交到數據庫。 - 續 – Dogulas
Continued- \t @Override 公共無效onBackPressed(){ \t Log.d( 「DetailActivity.onBackPressed()」, 「檢查點」); (_currentDataIsDirty){ \t \t DoDatabaseWork(_currentData); \t} \t _resultIntent = new Intent(); \t _resultIntent.putExtra(ListActivity .DETAIL_RESULT,_currentData); \t setResult(Activity.RESULT_OK,_resultIntent); \t super.onBackPressed(); } 我打算保持這種模式,當孩子需要做重任務時,從孩子活動回到父母活動。再次感謝。 – Dogulas
@Dogulas:很高興這有助於。與使用stackoverflow的情況一樣,你應該接受這個答案。 – PravinCG