我正在尝试解决以下问题:我正在编写一个具有多个共享数据模型的活动的应用程序。应用程序启动时从数据库中获取数据并保存为应用程序类扩展中的全局变量,如下所示:
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)线程的线程时,事情就会出现问题:我有一个服务,其中包含从数据库接收到新数据时的回调。回调在新线程上运行,因此更新我的应用程序数据模型必须在主线程上完成。为此,我使用了如下处理程序:
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 的方式传递它,但我在这篇文章中看到了
这可能会导致内存泄漏...?我不明白它是否属实以及为什么,也许我还有其他任何人都可以建议的解决方案?我真的很感激。是否可以在线程之间使用广播接收器?也许这是我的解决方案?