no-image

【Android Studio】While文で待機するとフリーズするときの対処方法

Android StudioでWhile文で待機処理を書くとフリーズするときの対処方法

Android Studioでフリーズしてしまう原因はいくつかあるようです。下記に示します。

  1. while文で条件成立を待つ
  2. Thread.sleep()を使用している

while文で条件成立を待つとフリーズする

while文で条件成立を待つとフリーズします。例えば下記のようなコードはフリーズします。

while(true){
if(count == 2){
break;
}}

Thread.sleep()を使用するとフリーズする

Thread.sleep()はたしかにスリープができるのですが、なぜかうまくいきません。さまざまなサイトで解説されていますが、下記のようなことがあってAndroidはThread.sleep()だとうまくいかないようです。

アンドロイドはシングルスレッドで動いているのでメインスレッドでsleepすると全てが止まるだけです。
Android – androidstudioで処理待ちをしたいです(21137)|teratail

While文を使わずに条件判断する方法(対処方法)

Javaのコードで条件がそろうまで待ちたいということがあります。筆者自身がはまってしまったことを指摘するのであれば以下のような事例があります。

  1. ひとつのイベントの中で処理をすませようとしていないか
  2. イベントの中で条件判断のコードを書く

たとえばボタンをおしたらcountが1ずつ増えるコードで、count == 2 になったら処理を実行するコードで、while文で待機処理をするのではなくて、
countを増やすボタンに条件判断を書くという発想があります。筆者のように初歩的なことではまる方はなかなかいないと思いますが、下記にサンプルコードを載せておきます。

startbutton.setOnClickListener(new ViweOnClickListener(){
@Override
public void onClick(){
//処理
}
});

//カウントを増やすボタン
button1.setOnClickListener(new ViewOnClickListener(){
@Override
public void onClick(){
count++
if(count == 4){
//条件が成立したら先にすすむ
}
}
});

このようなコードでstartボタンの中で処理をすべて完結させようとしていませんか?

そういうときは他のボタンの中で条件判断してコードを進ませるという発想があります。

とりとめのない記事になりましたが、なにかのやくにたてれば幸いです。