java - 在 Android 中按秒更新时间和日期

标签 java android

我想在 TextView 中实时显示时间和日期(按分钟更新)。目前,我有这个。考虑到内存使用和 Android 最佳实践,这是最好的方法吗? (注意:DateFormatjava.text.DateFormat)

private Thread dtThread;

public void onCreate(Bundle savedInstanceState) {
    ...
    getDateAndTime();
}

private void getDateAndTime() {
    dtThread = new Thread( new Runnable() {

        @Override
        public void run() {
            Log.d(TAG, "D/T thread started");
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    update();
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Log.d(TAG, "D/T thread interrupted");
                }
            }
        }

        public void update() {
            runOnUiThread( new Runnable() {

                @Override
                public void run() {
                    Date d = new Date();
                    String time = DateFormat.getTimeInstance(DateFormat.MEDIUM).format(d);
                    String date = DateFormat.getDateInstance(DateFormat.LONG).format(d);

                    TextView timeView = (TextView) findViewById(R.id.textStartTime);
                    TextView dateView = (TextView) findViewById(R.id.textStartDate);
                    timeView.setText(time);
                    dateView.setText(date);
                }

            });
        }

    });

    dtThread.start();
}

protected void onPause() {
    super.onPause();
    dtThread.interrupt();
    dtThread = null;
}

protected void onResume() {
    super.onResume();
    getDateAndTime();
}

最佳答案

我会使用 Runnable 并将其延迟发送到处理程序。

public class ClockActivity extends Activity {

    private SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");

    private TextView mClock;
    private boolean mActive;
    private final Handler mHandler;

    private final Runnable mRunnable = new Runnable() {
        public void run() {
            if (mActive) {
                if (mClock != null) {
                    mClock.setText(getTime());
                }
                mHandler.postDelayed(mRunnable, 1000);
            }
        }
    };

    public ClockActivity() {
        mHandler = new Handler();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mClock = (TextView) findViewById(R.id.clock_textview);
        startClock();
    }

    private String getTime() {
        return sdf.format(new Date(System.currentTimeMillis()));
    }

    private void startClock() {
        mActive = true;
        mHandler.post(mRunnable);
    }
}

关于java - 在 Android 中按秒更新时间和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400846/

相关文章:

android - 和引擎屏幕上的暂停按钮

java - JPA/Hibernate 中的单独表与额外列

android - Android Jetpack Compose 导航中的依赖性问题

java - Spring MVC @ModelAttribute @SessionAttributes - 为什么模型属性需要 @ModelAttribute 注解方法?

每次我想要获取登录信息时,JavaFX 任务都会将状态更改为失败

android - JellyBean 4.2 上的 Gif 动画不显示

java - AChartEngine 绘图、ArrayList 索引

android - 在联系人上显示带有同步适配器的状态图标

java - hibernate 注释 : No default constructor for entity

java - 如何将环境变量设置为localhost?