android - 服务和多线程调用

标签 android multithreading service

我创建了服务,这个服务有线程池,如果服务被销毁,是否意味着线程也被销毁,如果线程还在工作,如何停止运行?

最佳答案

if the service destroyed does that mean that the thread are destroyed too

没有。即使在 Service 被销毁后,Thread 仍将继续运行,直到操作系统在某个时间点终止您的应用程序进程,这可能会导致内存泄漏。

如果您创建线程,则必须清理它。

how to stop running threads if they are still working?

您不应使用 stop() 来终止线程,因为以这种方式停止线程是不安全的,并且会使您的应用程序和 VM 处于不可预测的状态。更干净的清理方法是中断线程。您需要维护对 Thread 的引用。然后清理线程执行以下操作:

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

在您的 Runnable in Thread 的 run() 中,执行以下操作

@Override
public void run() {
    // stop your thread
    if (interrupted()) {
        return;
    }
    ...
}

关于android - 服务和多线程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50341469/

相关文章:

带有通知 channel 的 Android 8 前台服务

javascript - 功能中的 AngularJS 范围似乎不起作用

android - 使用游标获取联系人抛出 sqlite 异常

android - 启动新 Activity 时出现 OutOfMemoryError

c++ - 在 QThread 中运行长时间操作并向主线程发送信号仍然会卡住 UI

java - CLR 是否执行 "lock elision"优化?如果不是,为什么不呢?

java - 如何在 Android 上组合 Activity?

android - 围绕轴心点旋转图像

c++ - 关于 pthread_cond_wait?

android - 当我禁用数据连接或 wifi 时服务停止