私のアプリケーションには、UIを更新するためのスレッドと対応するハンドラーがあります。このスレッドは私のメインアクティビティから開始され、スレッドはコンテキストを含むいくつかのパラメーターを取ります。このコンテキストは次のように使用されます。
Context c;
MessageHandler handler;
public BluetoothCommunicator(Context c) {
this.c = c;
handler = new MessageHandler(c);
}
私のrun()
メソッドでは、特別なイベントが発生したときに、このハンドラーにデータを投稿します。私のhandleMessage()
方法では、操作が進行中であることをユーザーに通知するために、いくつかのProgressDialogを作成します。
@Override
public void handleMessage(Message m) {
String message = (String) m.obj;
//Getting files
if (message.equals("0")) {
folder.appendToLogFile(new Date().toString(), "Incoming File From: " + deviceName);
pd = new ProgressDialog(c);
pd.setTitle("Please Wait..");
pd.setMessage("Retrieving file from " + deviceName);
pd.setCancelable(false);
pd.show();
}
私が理解しているように、でProgressDialogを作成することはできませんがgetApplicationContext()
、が必要Activity Context
です。
MATによると、これをコーディングした方法では、アプリケーションでメモリリークが発生します。
このトレースを見ると、コンストラクターで初期化しc
たオブジェクトに対応していることがわかります。c
これは正しいですか?
この問題を回避するにはどうすればよいですか?問題はにあるため、AsyncTaskは関係ありませんContext
。