0

Android Developer Site で次のように述べていますUIThread。代わりに、別のスレッドで実行する必要があります。このサイトでは、彼らはまだ言います:

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 秒間スリープさせます。したがって、このアプリを実行すると、Android は「アプリケーションが応答していません」と気付くと思います。しかし、私はエラーが表示されません。プログラムはスムーズに実行されます (「待機終了」というテキストも表示されます)。

それで、誰が私のコードについて説明してくれますか。私が作ったなんて間違ったことをしてください。

ありがとう :)

4

2 に答える 2

8

ここでの問題は、ブロックされるシグナル/イベントを生成しないことです。ユーザーまたはシステムが 5 秒以内にイベントに応答しない場合、Android はそのダイアログを表示します。イベントがないということは、ダイアログがないことを意味します。

したがって、何かをしようとするまで、コードは正常に実行されます。何もせずにコードを実行すると、問題なく動作します。最初にメニュー キーを押してイベントを生成すると、キー イベントが適切に処理されないため、ANR がトリガーされます。

この助けを願っています:)

于 2012-02-25T17:42:24.047 に答える
1

サブ質問の@hqt(コメントを投稿できなくて申し訳ありません)、プログラムを終了したい場合は、 をクリックした後buttonbutton8秒実行中にボタンをもう一度クリックすると、「魔法」があなたが望むように起こりました:)

于 2012-02-26T03:39:23.120 に答える