在 Android 主線程中啟動子線程,每 5 秒向 ScrollView 中的 TextView 追加文本,並自動滾動顯示最新內容。使用 Handler 機制(此處用 View.post())確保 UI 更新在主線程執行。
package com.example.uirefresh;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
private Button btnExit;
private TextView text;
private ScrollView scroll;
private volatile boolean running = true; // volatile 保證可見性
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnExit = findViewById(R.id.exit);
text = findViewById(R.id.text);
scroll = findViewById(R.id.scroll);
btnExit.setOnClickListener(this);
// 啟動刷新線程
new Thread(new RefreshRunnable()).start();
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.exit) {
finish();
}
}
private class RefreshRunnable implements Runnable {
@Override
public void run() {
while (running) {
try {
Thread.sleep(5000); // 5 秒間隔
} catch (InterruptedException e) {
e.printStackTrace();
}
// 切換到主線程更新 UI
text.post(() -> {
text.append("Hello World...\n");
// 自動滾動到底部
scroll.fullScroll(View.FOCUS_DOWN);
});
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
running = false; // 停止線程
}
}
Android 禁止非主線程操作 UI。View.post(Runnable) 將任務加入主線程消息隊列,是輕量級的替代 Handler 方案。
volatile boolean running 標誌位,確保主線程修改對子線程可見。onDestroy() 中置 false,配合 while(running) 實現優雅退出。scroll.fullScroll(View.FOCUS_DOWN); // 滾動到底部
需在文本追加後調用,確保新內容可見。
<ScrollView
android:id="@+id/scroll"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
<Button
android:id="@+id/exit"
android:text="退出"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Handler + sendEmptyMessageDelayed 實現定時任務,避免 Thread.sleep 阻塞線程。StringBuilder 或限制行數,防止 OOM。ExecutorService 管理線程生命週期更規範。