(초보)java로 android 코딩중 어플이 프리징걸립니다 (수정2)
조회수 1096회
이런 오류가 뜨는데 일단 코드는 아래과 같습니다. 다른 쓰레드 하나가 더 있는데 그건 다른 기능이라 뺏구요.
1번 쓰레드에서 카운트다운을 runOnUiThread로 보여주고 0초가 되면 알람을 울리게 while문으로 설정했습니다.(반복재생)
그 후 2번 쓰레드에서 버튼 입력을 받아서 10초부터 다시 카운트다운을 센 후 다시 알람이 울리게 만들려고 코드를 짰는데 버튼을 누르면 화면이 멈추고 10초 후에 알람이 다시 울립니다. 하지만 프리징은 그대로 걸려있어서 다른 동작을 할 수가 없습니다. 다른 것들은 작동을 확인했는데 runOnUiThread로 다른 쓰레드에서 textView를 수정하려고 하면 프리징이 걸립니다. 어디서 잘못된걸까요.
수정2
아래 코드 중 buttonSnooze의 for문과 while문이 들어가면 프리징이 걸립니다. 생략된 쓰레드에선 r값을 1로 바꾸면서 알람을 끄는 작동을 합니다. 그래서 생략된 쓰레드 작동시 알람이 꺼져야 하는데 프리징 때문에 아무런 작동을 할 수 없습니다.
for문이 돌아가는동안 프리징이 걸리고 while문이 돌아가는동안 프리징이 걸립니다.
while문은 나오려면 다른 쓰레드에서 r값을 바꿔줘야하는데 프리징으로 다른 버튼을 누를 수가 없어서 무한히 프리징이 걸립니다.
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_monitor);
textViewTime= (TextView) findViewById(R.id.textViewTime);
buttonDismiss= (Button) findViewById(R.id.buttonDismiss);
buttonSnooze= (Button) findViewById(R.id.buttonSnooze);
Intent inintent=getIntent();
RingSet=inintent.getIntExtra("RingId", 0);
SetTime=inintent.getIntExtra("SetTime", 0);
textViewTime.setText(String.valueOf(SetTime));
mediaPlayer=MediaPlayer.create(getApplicationContext(), RingSet);
new Thread(){
public void run(){
if(SetTime==0) return;
for(i=SetTime; i>0; i--){
runOnUiThread(new Runnable(){
public void run(){
textViewTime.setText(String.valueOf(i));
}
});
SystemClock.sleep(1000);
}
runOnUiThread(new Runnable(){
public void run(){
textViewTime.setText(String.valueOf("0"));
}
});
if(RingSet==0) return;
if(r!=1){
runOnUiThread(new Runnable(){
public void run(){
buttonSnooze.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(), "Alarm is ringing", Toast.LENGTH_SHORT).show();
}
});
}
while(r==0){
mediaPlayer.start();
}
}
}.start();
new Thread(){
public void run(){
mediaPlayer=MediaPlayer.create(getApplicationContext(), RingSet);
buttonSnooze.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View arg0){
r=2;
mediaPlayer.stop();
for(i=10; i>0; i--){
runOnUiThread(new Runnable(){
public void run(){
textViewTime.setText(String.valueOf(i));
}
});
SystemClock.sleep(1000);
}
while(r==2){
mediaPlayer.start();
}
}
});
}
}.start();
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력