Android 活动完成后停止下载图像的线程

Android 活动完成后停止下载图像的线程,android,multithreading,image,download,Android,Multithreading,Image,Download,在我的应用程序中,活动启动一个从服务器下载图像的线程。有30多张图片。下载时,用户可以切换到其他活动。所以我希望线程停止它正在做的任何事情。我在onDestroy()中使用了mThread.interrupt()方法,但它不起作用。如何做到这一点?当用户切换该活动时,该活动不会被销毁,但会暂停,因此在暂停()时尝试代码可能会起作用。我可以建议更简单、更安全的方法来处理此问题 在应用程序中使用通用价值; SharedReferences或内部应用程序上下文 Key=IsStopDownload 值

在我的应用程序中,活动启动一个从服务器下载图像的线程。有30多张图片。下载时,用户可以切换到其他活动。所以我希望线程停止它正在做的任何事情。我在onDestroy()中使用了mThread.interrupt()方法,但它不起作用。如何做到这一点?

当用户切换该活动时,该活动不会被销毁,但会暂停,因此在暂停()时尝试代码可能会起作用。

我可以建议更简单、更安全的方法来处理此问题

在应用程序中使用通用价值; SharedReferences或内部应用程序上下文 Key=IsStopDownload 值=真/假

第1部分) 应用程序上下文中(MyApplication)

第2部分) Activity onResume和onPause是确定活动状态的保证位置

onResume->activity处于活动状态 onPause->activity未处于活动状态

第3部分) 让线程检查活动状态,如果不活动,它可以自行停止,这比进行外部中断更安全。当从外部中断线程时,线程可能会表现出奇怪的行为,从内部中断循环更安全

e、 g

如果这是错误的,线程会自动停止

希望这有助于

---

社交编码

首先,使用
线程可能比使用
线程
要好得多,因此,就个人而言,我根本不会使用
线程。以我的拙见和小小的经验,在您使用它们的情况下,它们会不断增长,直到您有了意大利面条代码

第二,正如Nik博士所说,这项任务通常最好使用。在我看来,这是你能做的最好、更安全的事情

我想指出几个你应该使用的原因:

  • 服务不需要停止,因为活动已消失
  • 服务的实现非常简单和快速。完成的通知代码也很简单
  • 您正在下载图像,如果可以的话,最好立即完成这项工作,为用户节省带宽和连接时间,并在本地缓存图像。过去情况更糟,因为如今手机是成熟的电脑。但是,为提高效率而编码总是很重要的。因此,IMHO,您应该尽可能少/快地进行连接
  • 最后,即使在活动中使用
    AsyncTask
    s,也需要一个复杂(简单但仍然复杂)的代码,以便在活动结束时捕获并分离任务,并在任务恢复时检查空值。由于您正在下载图像,这可能需要一段时间,而且用户很可能会要求更改方向(将设备转到横向),因此您需要这样做。例如,在stackoverflow中搜索“方向更改异步任务”

可能还有其他原因,但这些都是我现在想的。当然,这是我的意见。

在您的情况下,我建议使用服务
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
}
((MyApplication)context.getApplicationContext()).getAppState(context);