Java Android Studio代码中的2个活动问题

Java Android Studio代码中的2个活动问题,java,android,android-activity,Java,Android,Android Activity,我正在通过Android Studio编写一个小应用程序。我正在进行两项活动。当我的第一个活动打开第二个活动时(当我通过模拟器运行应用程序时),我的应用程序就会停止响应。当我在第二个活动中插入for循环时,我意识到问题首先出现了。但是笔记的音频输出仍然是在后台完成的 如果你能在这里帮助我,那就太好了 代码如下: public class MainActivity extends AppCompatActivity { private Button myButton1, myButton2; pr

我正在通过Android Studio编写一个小应用程序。我正在进行两项活动。当我的第一个活动打开第二个活动时(当我通过模拟器运行应用程序时),我的应用程序就会停止响应。当我在第二个活动中插入for循环时,我意识到问题首先出现了。但是笔记的音频输出仍然是在后台完成的

如果你能在这里帮助我,那就太好了

代码如下:

public class MainActivity extends AppCompatActivity {
private Button myButton1, myButton2;
private EditText number;
TextView display;
int time = 0;
Bundle b;

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

    number = (EditText) findViewById(R.id.editTextNumber);
    myButton2 = (Button) findViewById(R.id.button);
    display = (TextView) findViewById(R.id.textView2);

    myButton2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String time = number.getText().toString();
            display.setText(time);
        }
    });


    myButton1 = (Button) findViewById(R.id.myButton);
    myButton1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            time = Integer.valueOf(number.getText().toString());
            open_activity2();
        }
    });
}

public void open_activity2() {
    Intent intent = new Intent(this, Activity2.class);
    intent.putExtra("Time", time);
    startActivity(intent);
}
}
活动2的代码:

public class Activity2 extends AppCompatActivity {

private SoundPool soundPool;
private int sound1, sound2, sound3;
private Bundle b;
private int timeCycle;
private TextView displayNotes;

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

    displayNotes = (TextView) findViewById(R.id.textView);

    b = getIntent().getExtras();
    timeCycle = b.getInt("Time");

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        AudioAttributes audioAttributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .build();
        soundPool = new SoundPool.Builder()
                .setMaxStreams(5)
                .setAudioAttributes(audioAttributes)
                .build();
    } else {
        soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    }
    sound1 = soundPool.load(this, R.raw.sound1, 1);
    sound2 = soundPool.load(this, R.raw.sound2, 1);
    sound3 = soundPool.load(this, R.raw.sound3, 1);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                try {
                    TimeUnit.SECONDS.sleep(timeCycle);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            randomNote();
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

        }
    }, 0);

}

protected void randomNote () {
    Random r = new Random();
    int randomNumber = r.nextInt(3);

    switch (randomNumber) {
        case 0:
            soundPool.play(sound1, 1, 1, 1, 0, 1);
            displayNotes.setText("Note: C");
            break;
        case 1:
            soundPool.play(sound2, 1, 1, 1, 0, 1);
            displayNotes.setText("Note: D");
            break;
        case 2:
            soundPool.play(sound3, 1, 1, 1, 0, 1);
            displayNotes.setText("Note: E");
            break;
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    soundPool.release();
    soundPool = null;
}
你在跑步

for (int i = 0; i < 10; i++) {
    try {
        TimeUnit.SECONDS.sleep(timeCycle);
        randomNote();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}
for(int i=0;i<10;i++){
试一试{
时间单位。秒。睡眠(时间周期);
随机注释();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
在UI线程上。这将导致UI更改冻结,直到循环完成。如果希望在运行此代码时具有活动UI,请使用处理程序:

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                try {
                    TimeUnit.SECONDS.sleep(timeCycle); 
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            randomNote();
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

        }
    }, 0);
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
对于(int i=0;i<10;i++){
试一试{
时间单位。秒。睡眠(时间周期);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
随机注释();
}
});
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
}, 0);

我在回复中添加了选项来执行此操作。你没有看到它吗?或者它对你不起作用吗?如果它对你起作用,请将此标记为正确答案:)好的,应用程序会打开第二个活动,但在播放第一个/第二个音符后,它会再次停止响应。它也不会将注释显示为文本视图:/哦,对不起,我没有看到randomNote正在访问UI,我将编辑我的答案以处理该问题,现在当doneCheck时将再次进行评论,查看是否正确。您能在错误日志中找到异常的部分吗?图片中没有包括崩溃的原因对不起,我的错:),也找到了这个链接:这是同一个链接?请尝试查找异常消息。。XX类似的东西,这张图片中的任何东西都是通用系统日志。尝试将筛选设置为错误,这将有助于编辑错误日志
new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                try {
                    TimeUnit.SECONDS.sleep(timeCycle); 
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            randomNote();
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

        }
    }, 0);