我正在嘗試解決以下問題: 我正在編寫一個具有共享數據模型的多個活動的應用程序。 的數據是從數據庫中取出時,應用程序啓動並保存爲應用類擴展全局變量如下:從android中的處理程序獲取應用程序實例
class MyApp extends Application {
private MyData myData;
public MyData getData(){
return myData;
}
public void setData(MyData d){
myData = d;
sendBroadcast(new Intent("DATA_UPDATED"););
}
}
的AndroidManifest.xml中進行更新,當然,一切的偉大工程 - 每一次活動都可以讀取數據和更新它,其他活動可以使用BroadcasrReceiver獲取數據更改的通知。 當我有另一個應該更新主(GUI)線程的線程時,情況會變得有問題: 當從數據庫接收到新數據時,我有一個包含回調的服務。回調函數在新線程上運行,因此必須在主線程上更新我的Apllication數據模型。 的,我用的處理程序如下:
public void ServiceCallback(...newData) {
//Pass the message up to our handler to make the update on the main thread.
Message receipt = Message.obtain(mHandler, 0, newData);
receipt.sendToTarget();
}
//Handle incoming message from remote on the main thread (GUI thread)
private Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
//read new data from the message - from msg.obj field, no prob.
//but - how can i get to my application model instance????
}
};
所以,我雖然通過它正是我傳遞的消息在NEW_DATA,但我看到in this post
,它可能會導致內存泄漏...?我不明白它是否真實,爲什麼,也許我有另一種解決方案,任何人都可以建議?我真的很感激。線程之間可以使用廣播接收器嗎?也許這是我的解決方案?
感謝您的回覆。實際上,我的第一個實現是簡單的單例,但是當我的應用程序在後臺運行一段時間後,出現了一個錯誤,單例被刪除,所以我得到了空引用。這就是我轉向Application類的原因。 –
如果你的進程被終止,單身數據將自然丟失。但是Application類也是如此。除了有一個'onCreate()'方法,你可以初始化東西,它絕不是特別的。你可以用一個帶有懶惰初始化數據的單例實現同樣的事情。 –
我的進程沒有被終止 - 服務仍在運行,但無法從單例中讀取數據。單身人士的記憶被清除了某些我不能理解的原因,我雖然也許如果我使用應用程序類它會工作。這個問題正在殺死我:( –