java - 如何在 Java 中完全停止线程?

标签 java android multithreading

我知道这个问题以前被问过很多次了。 我不想在 Run() 方法中添加标志。因为该方法仍在运行并耗尽电池电量。 我怎样才能完全停止线程?!

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout);

    AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
    dispatcher.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.AMDF, 22050, 1024, new PitchDetectionHandler() {

        @Override
        public void handlePitch(PitchDetectionResult pitchDetectionResult,
                AudioEvent audioEvent) {
            final float pitchInHz = pitchDetectionResult.getPitch();
            runOnUiThread(new Runnable() {
                 @Override
                 public void run() {

                    Log.i("" + pitchInHz);

                }
            });

        }
    }));

    Thread thread = new Thread(dispatcher,"Audio Dispatcher");
    thread.start();

}

最佳答案

很确定这对你来说不再重要了,但对于任何将来可能使用 TarsosDSP 并面临同样问题的人来说,最简单的方法是制作一个全局 dispatcher

dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

然后简单地停止 线程:

dispatcher.stop();

关于java - 如何在 Java 中完全停止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347502/

相关文章:

Java反射获取匿名类的原始接口(interface)

java - 使用 Servlet 注释进行映射不起作用

android - 自定义类上的不可序列化异常 - Android

php - 如何从此 Android 应用程序获取此 Google 登录 ID token 以验证服务器端?

java - 物体碰撞问题

java - 在 Java 8 中将标记流映射到 n-gram 流

android - 在 Android 中读取/写入外部 XML 文件

java - 一个棘手的死锁示例

c++ - 如何修复 macOS pthread 互斥锁性能低下的问题?

c - Unix套接字多客户端群组聊天,在c中使用客户端名称