在Android中强制关闭线程

时间:2014-09-21 06:56:12

标签: java android multithreading download

在我的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)
    }
}

从服务器下载数据非常慢时出现问题。虽然我关闭了应用程序:数据下载线程仍然存在。但是我需要在申请结束后立即关闭这个帖子。

有没有办法强制关闭它?或者任何其他标准的下载数据方式?

1 个答案:

答案 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方法来完成。