活动结束后停止下载图像的线程

时间:2011-11-03 10:02:00

标签: android multithreading image downloading

在我的应用程序中,活动启动一个从服务器下载图像的线程。有超过30张图片。下载时,用户可以切换到另一个活动。所以我希望线程应该停止做它正在做的事情。我在onDestroy()中使用了mThread.interrupt()方法,但它没有用。怎么做?

3 个答案:

答案 0 :(得分:0)

当用户切换活动时,这个活动不会被破坏但是暂停,所以尝试你的代码是onPause()可能会有效。

答案 1 :(得分: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) 让你的线程检查活动状态,如果没有激活,它可以自行停止,这比进行外部中断更安全。当从外部中断时,线程可能会很奇怪,从内部打破循环会更安全。

e.g。

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

如果那是假的,那么线程会自行停止

希望这会有所帮助...

---
社交编码@AspiroTV

答案 2 :(得分:0)

首先,使用AsyncTask而不是Thread可能要好得多,所以,就个人而言,我根本不会使用Thread。在我的拙见和小经验中,在你使用它们的情况下,它们会成长并增长,直到你有spaguetti代码。

其次,正如Nik博士所说,使用Service通常可以更好地完成此任务。在我看来,这是你能做的最好,最安全的事情。

我想指出为什么要使用它的几个原因:

  • 服务不需要停止,因为活动消失了。
  • 服务非常简单快捷。完成的通知代码也很简单。
  • 您正在下载图像,如果可以,最好立即完成工作,以节省用户的带宽和连接时间并在本地缓存图像。这曾经更糟糕,因为今天手机是完全成熟的电脑。但是,编码效率始终很重要。因此,恕我直言,你应该尽可能小/快地保持连接的需要。
  • 最后,即使在活动中使用AsyncTask,也需要一个棘手的(简单但仍然棘手的)代码,以便在Activity消失时捕获和分离任务,并在它返回时检查空值。由于您正在下载图像,这可能需要一些时间,并且用户可能会要求更改方向(将设备更改为横向),您需要。搜索stackoverflow以获取“orientation change asynctask”的示例。

也可能有其他原因,但现在这些都是我的首要问题。当然,这是我的观点。