3

Androidでスレッドを勉強しているだけです(私もスレッド期間に少し慣れていません)。他のさまざまな投稿を見ていますが、まだ少し説明が必要です。HelloWorld を使ってシンプルにしています。私がしたいのは、「Hello World this is a thread」というメッセージを表示し、各単語を 1 秒間隔で表示することです。メッセージで文字列配列を使用すると考えました。次に、スレッドで for ループを使用して、各要素を反復処理します。ループ全体が遅延時間枠で実行されるという点で、私の問題の論理を理解していると確信しています。各要素を1秒間隔で表示できるように、これをどのように解決できるか教えてもらえますか? これが私のコードです:

public class HelloWorld extends Activity {

Handler m_handler;
Runnable m_handlerTask ;
private TextView hello;

private String[] HelloWorld = {

        "Hello",
        "World",
        "This",
        "Is",
        "A",
        "Thread",

};
int i=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hello_world);
    hello = (TextView) findViewById(R.id.hello);

     m_handler = new Handler();
     m_handlerTask = new Runnable()

     {
         @Override 
         public void run() {
             if(i<HelloWorld.length-1)
             {
                     hello.append(HelloWorld[i]);
                     hello.setText("\n"); 
                     i++;
             }

             m_handler.postDelayed(m_handlerTask, 1000);
         }
    };
    m_handlerTask.run(); 
    m_handler.removeCallbacks(m_handlerTask);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.hello_world, menu);
    return true;
}

}

4

3 に答える 3

1

プレーンな Java を使用するThreadsのは良いことですが、UI を変更する必要がある場合は、単純に使用する方が簡単で優れています。AsyncTasks

次のように書くことができますAsyncTask

public class Task extends AsyncTask<String, String, Void> {

    private final TextView textView;

    public Task(TextView textView) {
        this.textView = textView;
    }

    protected void onProgressUpdate(String... update) {
        textView.append(update[0]);
    }

    protected Void doInBackground(String... params) {
        for (String param : params) {
            publishProgress(param);
            try {
                Thread.sleep(1000)
            } catch (InterruptedException e) {

            }
        }

        return null;
    }
}

そして、あなたはそれを次のActivityように使用しています:

Task task = new Task(hello);
task.execute("Hello", "world", "this", "is", "a", "thread");
于 2013-05-10T15:39:32.337 に答える