如何在两个线程之间实时更新共享的布尔变量?

奥马哈·内布拉斯加

我正在尝试调用线程以使用循环播放声音。看来可以打电话玩了。

但是,我希望能够允许用户单击“暂停”按钮时退出循环。我已经设置了布尔变量“ PauseClicked”以允许这样做。

我想遇到的问题-我不知道如何从主线程更新“ PauseClicked”变量。您知道在循环运行时如何同时从主线程更新此变量吗?

您能提供的任何帮助将不胜感激。我花了很多时间在此上。我不确定的特定代码如下(更新变量的尝试在最后第三行):

// Import statements
 public class MyActivity extends Activity {
 boolean PauseClicked = false;

 // .... Other variables and onCreate....


    public void whenPlayClicked(View view) {
        new LongOperation().execute("");

    }

    private class LongOperation extends AsyncTask<String, Void, String> {

 @Override
        protected String doInBackground(String... params) {

            //Setup playing variables
            AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            float curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
            float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
            float leftVolume = curVolume / maxVolume;
            float rightVolume = curVolume / maxVolume;
            int priority = 1;
            int no_loop = 0;
            float normal_playback_rate = 1f;

            //temporary sleep counters
            int blueSleep = (BlueCount * 1000);
            int greenSleep = (GreenCount * 1000);
            int redSleep = (RedCount * 1000);
            int orangeSleep = (OrangeCount * 1000);
            int bellSleep = 4000;
            int cyclesPlayed = 0;

            // Loop - loop until either 1) all cycles have been played. (i.e repeat number of times selected from Spinner).
            //  or 2)Pause button is clicked.
            for (PauseClicked = false; (cyclesPlayed < cycleCount) && (PauseClicked == false); cyclesPlayed++) {
                if (blueSleep > 0) {
                    soundPool.play(blueSoundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);
                    SystemClock.sleep(blueSleep);
                }

                if (greenSleep > 0) {
                    soundPool.play(greenSoundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);
                    SystemClock.sleep(greenSleep);
                }

                if (redSleep > 0) {
                    soundPool.play(redSoundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);
                    SystemClock.sleep(redSleep);
                }

                if (orangeSleep > 0) {
                    soundPool.play(orangeSoundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);
                    SystemClock.sleep(orangeSleep);
                }
          //      CheckForPause();
            }

            if (TotCount > 0) {
                SystemClock.sleep(bellSleep);
                soundPool.play(bellSoundID, 0.05F, 0.05F, priority, no_loop, normal_playback_rate);
                SystemClock.sleep(bellSleep);
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            textView2.setText("We are returning from call to ASynch task.");
        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
    }


    public void whenPauseClicked(View view) {
        Toast.makeText(getApplicationContext(), "All sounds were paused", Toast.LENGTH_SHORT).show();
        PauseClicked = true;
        soundPool.autoPause();
    }
鲁汶·查恰

您需要使用AtomicBoolean,这是您的情况下使用的布尔值-当多个线程访问它时。尝试将PauseClicked的定义更改为

AtomicBoolean PauseClicked = new AtomicBoolean(false);

在您的代码中,尝试访问它时使用它的get和set方法。让我知道是否有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在两个线程之间共享数据

来自分类Dev

在两个线程之间共享时间变量

来自分类Dev

在更新时立即反映对两个线程之间的共享变量所做的更改

来自分类Dev

如何在2个CLI线程之间共享变量(布尔)?

来自分类Dev

如何在两个线程之间共享或避免共享Websocket资源?

来自分类Dev

如何在线程之间共享变量?

来自分类Dev

java如何在线程之间共享变量

来自分类Dev

如何在两个函数之间共享公共变量

来自分类Dev

如何知道两个进程之间的共享内存?

来自分类Dev

Indy TCP套接字可以在两个线程之间共享吗?

来自分类Dev

是否可以在两个线程之间共享相同的消息队列?

来自分类Dev

如何在两个不同的进程之间通过python3中的指针地址共享数组?

来自分类Dev

如何在php中的线程之间共享全局变量?

来自分类Dev

Ruby:如何在运行 object.method 的线程之间共享全局变量

来自分类Dev

两个进程之间的命名共享内存

来自分类Dev

两个进程之间的命名共享内存

来自分类Dev

如何在两个对象之间建立实时连接

来自分类Dev

试图在两个线程之间创建死锁

来自分类Dev

澄清两个线程之间的死锁

来自分类Dev

如何在多个线程之间共享一个mysql连接?

来自分类Dev

如何在多个线程之间共享一个mysql连接?

来自分类Dev

Ruby:如何在两个单独的类之间共享实例变量?

来自分类Dev

如何在两个分别运行的python脚本之间共享变量

来自分类Dev

如何在线程之间共享对AtomicBool的访问?

来自分类Dev

如何在python中的线程之间共享整数

来自分类Dev

如何在线程之间共享非发送对象?

来自分类Dev

如何在线程之间共享巨大的进程

来自分类Dev

如何在线程之间共享非发送对象?

来自分类Dev

Jmeter-如何在线程之间共享cookie?

Related 相关文章

  1. 1

    如何在两个线程之间共享数据

  2. 2

    在两个线程之间共享时间变量

  3. 3

    在更新时立即反映对两个线程之间的共享变量所做的更改

  4. 4

    如何在2个CLI线程之间共享变量(布尔)?

  5. 5

    如何在两个线程之间共享或避免共享Websocket资源?

  6. 6

    如何在线程之间共享变量?

  7. 7

    java如何在线程之间共享变量

  8. 8

    如何在两个函数之间共享公共变量

  9. 9

    如何知道两个进程之间的共享内存?

  10. 10

    Indy TCP套接字可以在两个线程之间共享吗?

  11. 11

    是否可以在两个线程之间共享相同的消息队列?

  12. 12

    如何在两个不同的进程之间通过python3中的指针地址共享数组?

  13. 13

    如何在php中的线程之间共享全局变量?

  14. 14

    Ruby:如何在运行 object.method 的线程之间共享全局变量

  15. 15

    两个进程之间的命名共享内存

  16. 16

    两个进程之间的命名共享内存

  17. 17

    如何在两个对象之间建立实时连接

  18. 18

    试图在两个线程之间创建死锁

  19. 19

    澄清两个线程之间的死锁

  20. 20

    如何在多个线程之间共享一个mysql连接?

  21. 21

    如何在多个线程之间共享一个mysql连接?

  22. 22

    Ruby:如何在两个单独的类之间共享实例变量?

  23. 23

    如何在两个分别运行的python脚本之间共享变量

  24. 24

    如何在线程之间共享对AtomicBool的访问?

  25. 25

    如何在python中的线程之间共享整数

  26. 26

    如何在线程之间共享非发送对象?

  27. 27

    如何在线程之间共享巨大的进程

  28. 28

    如何在线程之间共享非发送对象?

  29. 29

    Jmeter-如何在线程之间共享cookie?

热门标签

归档