2011-11-03 48 views
0

在我的應用程序中,活動啓動從服務器下載圖像的線程。有超過30張圖片。在下載時,用戶可以切換到另一個活動。所以我希望線程應該停止做任何事情。我在onDestroy()中使用了mThread.interrupt()方法,但它沒有奏效。怎麼做?當活動結束時停止線程下載圖像

+2

你的情況我建議使用服務 –

回答

0

我可以建議簡單&更安全的方法來處理在您應用此

使用共同的價值; SharedPreferences或應用程序上下文 答案= IsStopDownload 值=真/假

PART.1) 在應用程序上下文(MyApplication的)內部

private boolean isAppActive = false; 
public void setAppState(Context context, boolean state) { 
    isAppActive = state; 
    // note: you can also store this in SharedPreferences 
} 
public boolean getAppState(Context context) { 
    return isAppActive; 
    // note: you can also load this from SharedPreferences 
} 

PART.2) 活動的onResume和的onPause被保證識別您的活動狀態的地方。

的onResume - >活動活躍 的onPause - >活動不活躍

PART.3) 讓你的線程檢查活動狀態,如果不活動,可自行停止,那是安全的,然後讓外部中斷。從外部打斷時,線程可能會很奇怪,從內部打破循環更安全。

例如

((MyApplication)context.getApplicationContext()).getAppState(context); 

如果那是假的,線程停止本身

希望這有助於...

---
社會編碼@AspiroTV

0

當用戶將切換活動,這一個不會被破壞,但暫停,所以試圖你的代碼是onPause()可能工作。

+0

我試過,但onPause()沒有工作。 –

0

首先,你可能使用AsyncTaskThread好得多,所以,我個人根本不會使用Thread。根據我的小見解和小體驗,在你使用它們的情況下,它們會隨着代碼的不斷增長而增長。

第二,正如Nik博士所說,使用Service可以更好地完成這項任務。在我看來,這是你能做的最好也是最安全的事情。

我想指出幾個原因,你應該使用一個:

  • 該服務,因爲活動的消失並不需要停止。
  • 服務是非常容易和快速實施。並且完成的通知代碼也很容易。
  • 您正在下載圖像,並且如果可以,儘可能一次完成這項工作總是更好,以節省本地用戶和緩存圖像的帶寬和連接時間。過去這種情況更糟,因爲今天的手機是完全成熟的電腦。但編碼效率總是很重要。因此,恕我直言,你應該儘可能保持連接的需要。
  • 最後,即使在活動內部使用AsyncTask也需要一個棘手的(簡單但仍然棘手的)代碼,以便在活動消失時捕獲和分離任務,並在返回時檢查空值。由於您正在下載圖片,而且這可能需要一些時間,用戶可能會要求方向更改(將設備轉向橫向),因此您需要。示例中的「orientation orientation asynctask」的搜索stackoverflow。

也可能有其他原因,但那些現在是我的頭頂。當然,這是我的看法。