Java 在Android中以秒为单位更新时间和日期

Java 在Android中以秒为单位更新时间和日期,java,android,Java,Android,我想在文本视图中实时显示时间和日期(按分钟更新)。目前,我有这个。考虑到内存使用和Android最佳实践,这是最好的方法吗?(注意:DateFormat是java.text.DateFormat) 您可能可以使用处理程序将更新发布到UI线程。查看此更新计时器的最佳实践 与其设计自己的计时器来处理此问题,我建议使用广播接收器列表来显示每分钟发送一次的意向广播集: 如果您想知道如何执行此操作的示例代码,请告诉我。我将使用Runnable并将其延迟发布到处理程序 public class ClockA

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


您可能可以使用处理程序将更新发布到UI线程。查看此更新计时器的最佳实践


与其设计自己的计时器来处理此问题,我建议使用广播接收器列表来显示每分钟发送一次的意向广播集:


如果您想知道如何执行此操作的示例代码,请告诉我。

我将使用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);
    }
}

似乎
ACTION\u TIME\u TICK
不允许我在第二秒内更新。在这方面,在我看来,使用广播接收器就像是鲁比·戈德伯格(Rube Goldberg)这样做的一种方式。没错,“行动时间”每分钟、每分钟都在更新。但是,如果您希望更新textview以按分钟显示日期和时间,它应该执行您需要它执行的任务。
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);
    }
}