首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Android ScrollView 定時自動刷新實作範例

     編輯:Java 相關知識

功能描述

在 Android 主線程中啟動子線程,每 5 秒向 ScrollView 中的 TextView 追加文本,並自動滾動顯示最新內容。使用 Handler 機制(此處用 View.post())確保 UI 更新在主線程執行。

完整 Activity 代碼

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; // 停止線程
    }
}

關鍵技術點

1. 線程安全與 UI 更新

Android 禁止非主線程操作 UI。View.post(Runnable) 將任務加入主線程消息隊列,是輕量級的替代 Handler 方案。

2. 線程停止控制

  • 使用 volatile boolean running 標誌位,確保主線程修改對子線程可見。
  • 在 onDestroy() 中置 false,配合 while(running) 實現優雅退出。

3. ScrollView 自動滾動

scroll.fullScroll(View.FOCUS_DOWN); // 滾動到底部

需在文本追加後調用,確保新內容可見。

布局文件要點 (activity_main.xml)

<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" />

改進建議

  1. 生產環境建議使用 Handler + sendEmptyMessageDelayed 實現定時任務,避免 Thread.sleep 阻塞線程。
  2. 大量文本追加時考慮 StringBuilder 或限制行數,防止 OOM。
  3. 使用 ExecutorService 管理線程生命週期更規範。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved