当前位置: 首页 > 知识库问答 >
问题:

停止线程,不扩展类

郭凯
2023-03-14

我已经查看了这里给出的一些ANWER,但我没有得到解决我问题的确切方法:我不想创建一个新的类并扩展runnable或Thread。

我有一个服务,它在创建时必须每10秒检查一些东西,并且所需的调用不能从主线程执行,所以在StartCommand()方法中我执行以下操作:

    mThread = new Thread() {
        public void run() {
            while(true) {

                    // some code

                    try {
                        Thread.sleep(10000);
                    }
                    catch (Exception e){
                        StringWriter errors = new StringWriter();
                        e.printStackTrace(new PrintWriter(errors));
                        Log.i("Exception", errors.toString());
                    }
                }

现在,当我调用onStopService()时,我想停止这个线程。方法stop()不推荐使用,因此我使用中断():

@Override
public void onDestroy(){
    mDelete.interrupt();
    mDownload.interrupt();
    super.onDestroy();
}

正如我预期的那样,它抛出InterruptedException,因为线程在调用中断时处于Hibernate状态。

共有1个答案

朱天逸
2023-03-14

正如您在这里看到的,您可以在线程中使用以下代码:

try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        // We've been interrupted, and returning from the run method will stop your thread.
        return;
    }

不过,一般情况下最好避免无限循环服务。您应该考虑在工作完成后停止服务,在需要新工作时重新启动服务(使用AlarmManager)。我将不再重复使用intentservicealarmmanager的代码,因为Eugen Pechanec已经给出了很好的解释。

 类似资料:
  • 我需要编写一个扩展Thread类的应用程序。我的类在实例化时接受一个整数(即100)<代码>(MyThread myt=新的MyThread(100);) 这个整数将是这个类循环并打印消息的次数。消息应该是“线程正在运行…100”。100将是我传入构造函数的任何数字。如果数字是150,那么输出应该是“线程正在运行…100”。我应该使用main方法来测试这个类。在主线程中,我将启动两个线程,一个线程

  • 扩展说明 服务提供方线程池实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。 扩展接口 org.apache.dubbo.common.threadpool.ThreadPool 扩展配置 <dubbo:protocol threadpool="xxx" /> <!-- 缺省值设置,当<dubbo:protocol>没有配置threadpool时,使用此配置 -

  • 问题内容: 我正在编写一段连接到服务器的代码,使用该连接会生成一堆线程并执行一堆“工作”。 在某些情况下,连接失败,我需要停止所有操作并从头开始创建新对象。 我想在对象之后进行清理,但在线程上调用thread.stop,但是此方法似乎已被弃用。 推荐的替代方法是什么?是否应该为每个线程编写自己的清理和退出方法?将线程设置为null?或者是其他东西? 问题答案: 看这里 : 在HowToStopAT

  • 问题内容: 如果我有这样的Java代码: 并在调试中运行它,我可以看到所有这些线程(在取消之后)仍在运行,所以它们也占用了我的内存吗?如果是的话,我怎么能完全销毁那些线程? 问题答案: 调用您的线程,仅此而已。因此,您需要在您的方法中正确处理它。对于您的简单情况,您的线程将完成其执行,并且它们的对象将由GC清除。

  • 我的Visual Studio Code有问题。昨天我在打开VS Code的情况下关闭了我的电脑,当我再次打开电脑时,所有VS Code扩展都停止了工作。我在项目中使用React和Types cript,我真的需要这些扩展。我的eslint和漂亮的配置也停止了工作。如果有人有同样的问题,请回答。