可能重複:
RuntimeException: Can't create handler inside thread that has not called Looper.prepare()如何在後臺線程中反序列化Activity對象?
我有在Android中使用Java序列化機制的問題。它運作良好,從UI線程調用時,但是當我試圖從一些後臺線程使用它我得到:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
由於項目性質的,我不能反序列化UI線程(一切也應該可以做它在後臺,所以用戶界面不會停止響應)。
順便說一句。當我嘗試使用SimpleXML反序列化背景中的某些內容時,會發生同樣的事情。
所以現在我們從UI線程進行反序列化(包括XML和Java序列化),這是無法在任何地方使用的。
任何人都可以解釋一下這個問題?
編輯:
我用下面的代碼進行反序列化一個對象,它運作良好,從UI線程調用時。
public Object getObject(String key) throws InvalidClassException {
Object result;
try {
FileInputStream fileIn = context.openFileInput(getPath(key));
ObjectInputStream in = new ObjectInputStream(fileIn);
result = in.readObject();
in.close();
fileIn.close();
} catch (InvalidClassException e) {
throw new InvalidClassException(e.getMessage());
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
return result;
}
編輯2
如下面EJP評論中提及,我反序列化活動對象。所以我改變我的questuion:如何反序列化後臺線程中的Activity對象? 由於性能問題(XML在大約4s內反序列化,而二進制反序列化小於0.5s),不反序列化此對象是我寧願避免的選項。我知道重新設計我們的應用程序是可能的,但是由於項目限制,這是極端的和不必要的複雜性,這不是一個真正的選擇。每一個更大的改變都是非常痛苦的。
所以當問題更清晰 - 有沒有人有一些想法?
感謝您的任何建議。
沒有人會去勺餵你,並不會提供你確切的代碼。你必須在給定的建議的基礎上適用一點你自己的大腦。 –
@dinesh我不僅能夠寫我自己的代碼,只是要求一些建議,這裏可能是錯誤的。爲什麼這麼苛刻? – kajman
爲什麼在後臺線程中需要Looper? –