在我的應用程序中,我有一個線程和相應的處理程序來更新UI。這個線程將從我的主要活動開始,並且線程需要幾個參數,包括一個上下文。此背景下這樣使用:上下文和內存泄漏
Context c;
MessageHandler handler;
public BluetoothCommunicator(Context c) {
this.c = c;
handler = new MessageHandler(c);
}
在我run()
方法我一些數據發佈到該處理程序,在一個特殊的事件已發生。在我的handleMessage()
方法中,我創建了一些ProgressDialogs,以通知用戶操作正在進行。
@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();
}
按我的理解,我不能getApplicationContext()
創建ProgressDialog,但我需要的Activity Context
。
我的編碼,這將導致我的廣告應用程式內存泄漏,根據MAT
我看到這個痕跡是,c
對應的,一路上對象c
我在構造函數中initalize 。這是正確的嗎?
我該如何解決這個問題?沒有AsyncTask不相關,因爲問題出在Context
。
你想獲得堆棧頂部的活動的上下文嗎? (以便您可以在該活動上顯示對話框?) – Shrikant
這是正確的。我從我的主要活動開始我的線程,進度對話框也應該出現在此活動的頂部。 –