次の問題を解決しようとしています: データ モデルを共有する複数のアクティビティを持つアプリケーションを作成しています。アプリケーションの起動時にデータが DB からフェッチされ、次のように Application クラス拡張にグローバル変数として保存されます。
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) スレッドを更新する必要がある別のスレッドがあると、問題が発生します。db から新しいデータを受信したときにコールバックを含むサービスがあります。コールバックは新しいスレッドで実行されているため、アプリケーション データ モデルの更新はメイン スレッドで行う必要があります。そのために、次のようにハンドラーを使用しました。
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 を渡したのとまったく同じように渡しましたが、この投稿で見ました
それはメモリリークにつながる可能性があります...?それが本当かどうか、そしてその理由がわかりませんでした。誰かが提案できる別の解決策があるかもしれません。とても感謝しております。スレッド間でブロードキャスト レシーバを使用することは可能ですか? 多分これは私の解決策ですか?