在我的应用程序中,活动启动一个从服务器下载图像的线程。有超过30张图片。下载时,用户可以切换到另一个活动。所以我希望线程应该停止做它正在做的事情。我在onDestroy()中使用了mThread.interrupt()方法,但它没有用。怎么做?
答案 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”的示例。也可能有其他原因,但现在这些都是我的首要问题。当然,这是我的观点。