0

私のアプリケーションにこのコードがあるとしAlertDialog.Builder(context)ます。問題は、それThreadがどちらで実行されるかです。

final Thread myPrettyOperation = new Thread() {
    @Override
    public void run() {
        //Do some really long operation.
    }
};
class MyPrettyTask extends
        AsyncTask<Void, Integer, Boolean> {
    protected Boolean doInBackground(
            Void... voids) {
        myPrettyOperation.start();
        return true;
    }
    protected void onProgressUpdate(
            Integer... progress) {
    }
    protected void onPostExecute(Boolean result) {
    }
}
new MyPrettyTask().execute();
4

3 に答える 3

1

投稿したコードのどの部分が考慮されるかによって異なります。コードには 3 つのスレッドが関与しています。

明らかに、 run() の本体は、myPrettyOperation 用に作成したスレッドで実行されます

「myPrettyOperation.start(); return true;」という行 AsyncTask のシステムのスレッド プールから割り当てられたスレッドで実行されます。

残りのコードは、アプリケーションの UI スレッド(つまり、メイン スレッド)で実行されます

于 2012-06-23T00:51:40.757 に答える
1

Vipul Shah の返信に対するコメントで追加の質問をしたので、ここで回答します (コード ブロックが必要です)。あなたの質問は:

あなたはこれについて確信を持っていますか?[すべて UI スレッドで実行されるかどうか]どうすればこれをさらに調査できますか?

以下に投稿したコードブロックを使用します。

コードに挿入した Log.i 呼び出しに注意してください。アプリケーションを実行し、logcat の出力を確認します。スレッド名は、それぞれ「Thread1:」、「Thread2:」、「Thread3:」で始まる行にリストされます。出力で "main" と表示されている場所は、UI スレッドを意味します。それ以外の場合は、myPrettyOperation の「Thread14」など、スレッドの名前が表示されます。

final Thread myPrettyOperation = new Thread() {
    @Override
    public void run() {
        Log.i("YOUR_TAG", "Thread1: "+ Thread.currentThread().getName()); 
        //Do some really long operation.
    }
};
class MyPrettyTask extends
        AsyncTask<Void, Integer, Boolean> {
    protected Boolean doInBackground(
            Void... voids) {
        Log.i("YOUR_TAG", "Thread2: "+ Thread.currentThread().getName()); 
        myPrettyOperation.start();
        return true;
    }
    protected void onProgressUpdate(
            Integer... progress) {
    }
    protected void onPostExecute(Boolean result) {
    }
}
new MyPrettyTask().execute();
Log.i("YOUR_TAG", "Thread3: "+ Thread.currentThread().getName()); 
于 2012-06-23T15:01:16.277 に答える
0

アプリケーションの AlertDialog.Builder(context) にこのコードがあるとします

常にUIスレッドで実行されます

于 2012-06-23T03:10:44.653 に答える