在我的Android应用程序中,我使用线程下载一些数据。
以下是当前正在运行的代码的原型:
void startThread()
{
thread = new Thread(this);
thread.setPriority(Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
}
@Override
public void run()
{
while(application_running)
{
//download my data... (on slow server response, execution gets stuck here)
}
}
从服务器下载数据非常慢时出现问题。虽然我关闭了应用程序:数据下载线程仍然存在。但是我需要在申请结束后立即关闭这个帖子。
有没有办法强制关闭它?或者任何其他标准的下载数据方式?
答案 0 :(得分:0)
使用与您的Activity(或Fragment)生命周期绑定的AsyncTask。
http://developer.android.com/reference/android/os/AsyncTask.html
假设您有一个名为t的AsyncTask的成员变量,并且它已经在您的Activity或Fragment中的其他位置启动,您可以在onDestroy()中执行以下操作:
if ((t != null) && !t.isCancelled())
{
boolean mayInterruptIfRunning = true;
t.cancel(mayInterruptIfRunning);
t = null;
}
使用AsyncTask还有一个好处,即允许您在UI线程上安全地更新UI以进行进度报告,并在后台任务完成后通过覆盖onProgressUpdate和onPostExecute方法来完成。