Androidデベロッパーサイトでは、UIThread
で長時間操作を使用しないでください。代わりに、別のスレッドで実行する必要があります。このサイトでは、彼らはまだ言う:Android Apps:UIThreadブロックの後に5秒後に「アプリケーションが応答しません」と表示されますか?
UIスレッドが数秒以上(現在は約5 秒)のためにブロックされている場合、ユーザーは、悪名高い 「アプリケーション応答していない」(ANR)ダイアログが表示されます。
この文章をテストするために、私は証明をします。ここに私のコードは次のとおりです。見ての通り
package com.app;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Example extends Activity{
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
textView = new TextView(this);
textView.setText("please wait");
setContentView(textView);
}
@Override
public void onResume(){
super.onResume();
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
textView.setText("end waiting !!!");
}
}
、私は(UIThread
)現在のスレッドを作る8秒に眠ります。だから私は、私はこのアプリを実行すると、アンドロイドは気づくでしょう: "アプリケーションが応答していません"。しかし、私はどんな誤りも見ない。プログラムはスムーズに実行されます(また、テキスト「end waiting」も参照してください)。
私のコードについて、私の説明があります。何を私が作った間違ったことをしてください。
感謝:)
OPが5秒以上UIスレッドをブロックするものを実行しようとする場合、理想的にはAsyncTaskに入るはずです。 – Knossos
@alextsc詳細な例を教えてください。私は新しい 'ボタン 'を作成し、それを' onRefresh'イベントにします。その後、私がアプリを起動するときに、私はその 'Button'を押しますが、それでも問題は起こりません。リフレッシュのためにここに私のコード: – hqt
ます。public void onRefresh(ビュービュー){ \t \t試し{ \t \t \tのThread.sleep(8000); \t \t}キャッチ(InterruptedExceptionある電子){} \t \t \t \t textView.setText( "待機終了!!!")。 \t \t \t} – hqt