Tôi cần một chút trợ giúp với việc cập nhật giao diện người dùng của mình từ Runnable/Handler mỗi giây. Tôi đang sử dụng mã này:Cập nhật Android ui từ bộ xử lý mỗi giây
Runnable runnable = new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
prBar.setProgress(myProgress);
y = (double) ((double) myProgress/ (double) RPCCommunicator.totalPackets)*100;
txtInfoSync1.setText(Integer.toString((int)y) + "%");
prBar.setMax(RPCCommunicator.totalPackets);
int tmp = totalBytesReceived - timerSaved;
Log.w("","totalBytesReceived : "+totalBytesReceived + " timerSaved : "+timerSaved);
Log.w("","tmp : "+tmp);
if (avgSpeedCalc.size() > 10)
{
avgSpeedCalc.remove(0);
}
avgSpeedCalc.add(tmp);
int x = 0;
for (int y=0;y<avgSpeedCalc.size();y++)
{
x += avgSpeedCalc.get(y);
Log.d("","x : "+x);
}
x = Math.round(x/avgSpeedCalc.size());
Log.e("","x : "+x);
timerSaved = totalBytesReceived;
txtSpeed.setText(Integer.toString(x));
}
});
}
};
Tôi đã thử với handler.postDelayed(runnable, 1000);
trong onCreate()
, nhưng Runnable bao giờ bắt đầu. Hoặc thậm chí nếu tôi thử với runnable.run();
, nó vẫn không hoạt động.
Bất kỳ ý tưởng nào về cách tôi có thể bắt đầu chạy/xử lý và cập nhật ui mỗi giây?
và làm thế nào tôi có thể ngăn chặn nó sau đó? Tôi có nghĩa là tôi cần điều này để chạy chỉ khi tôi nhận được dữ liệu qua internet và tôi muốn dừng runnable sau khi kết thúc hoạt động hoặc người dùng nhấp vào nút hủy bỏ. –
cập nhật câu trả lời của tôi và giới thiệu một lá cờ – WarrenFaith
Thực ra 'handler.removeCallbacks (runnable);' đang làm điều tương tự. –