Java 在Android中,有没有办法停止后台线程而不杀死进程?

Java 在Android中,有没有办法停止后台线程而不杀死进程?,java,android,multithreading,Java,Android,Multithreading,我的应用程序有一个服务,在用户按下退出按钮之前一直运行。我知道在安卓系统中给出退出按钮不是一个好的设计,但在我的应用程序中,它是需要的 在我的应用程序中,我还有一个线程来发送Http请求,下载一个文件,然后在后台解析它,这样UI就不会阻塞。在我线程的run方法中,有一些连续的步骤,比如下载一个文件,然后解析它,其中没有while或for循环 当用户按下退出按钮时,如果后台线程在没有使用process.kiilpid或System.exit0终止进程的情况下运行,是否有方法停止后台线程 我也尝试过

我的应用程序有一个服务,在用户按下退出按钮之前一直运行。我知道在安卓系统中给出退出按钮不是一个好的设计,但在我的应用程序中,它是需要的

在我的应用程序中,我还有一个线程来发送Http请求,下载一个文件,然后在后台解析它,这样UI就不会阻塞。在我线程的run方法中,有一些连续的步骤,比如下载一个文件,然后解析它,其中没有while或for循环

当用户按下退出按钮时,如果后台线程在没有使用process.kiilpid或System.exit0终止进程的情况下运行,是否有方法停止后台线程

我也尝试过异步任务。不管线程的run方法是什么,我都把它放在doInBackground方法中。当用户按下退出按钮时,我已经取消了异步任务。取消任务不会完全停止后台线程,因为文件下载后,它将进入解析器解析文件,即解析在后台线程中完成,但解析时它不在doInBackground或run方法中。它将在解析器类的解析方法中或在默认处理程序类中进行解析

通过谷歌搜索,我读了很多博客和其他关于线程的问题,但我仍然找不到任何解决方案。
请帮助…提前感谢..

在每个步骤之前,您可以添加一行,如

if(stillRunning){ 
//next step
}

当您希望它停止时,只需将stillRunning设置为false。

1使用此选项停止应用程序,而不是退出

            finish();
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    startActivity(intent);
2使用新线程代替asynk任务,您可以通过调用stop方法停止该任务

            Thread myThread = new Thread ()
        {
            public void run()
            {
                Looper.prepare();
                doMyWork();
            }


        }.start();

在myThread上调用stop可能,您的连接和解析器使用相同的InputStream。如果退出,请尝试关闭流和连接。在这种情况下,将抛出某种异常,后台线程将以错误的方式完成任务,但速度非常快。如果你在文件保存的中间,你必须检查每一个写缓冲区,如果你被取消或者试图关闭FielOutPutsStudio。< /P> < P>停止线程,当UI发生退出事件时,不使用< /P>
Process.killProcess(Process.myPid());

但如何在默认处理程序的xml解析器子类的每一步上实现,如清单6所示。SAX handlerbut在使用stop方法时要小心阅读此选项,对于第一个选项,它将不会停止后台线程。它将只完成活动。对于第二个选项,线程的停止方法是decrycated。第一个选项不是用于停止线程,而是因为您正在使用退出,这不是一种好的做法。在退出位置,您要关闭应用程序。我知道,退出不是一种好的做法,但这是我的应用程序所希望的。我想要一个停止后台线程的解决方案。请检查我在那里的第一条评论,我已经给出了两个链接。这两种用途都是不同的流。