Java 在Android draw循环中以毫秒为单位查找当前时间的正确方法

Java 在Android draw循环中以毫秒为单位查找当前时间的正确方法,java,android,time,Java,Android,Time,我试图在Android应用程序的Draw()循环中尽可能多地删除对象创建,以最小化垃圾收集,但我在处理时间方面遇到了麻烦。我知道两种获取当前时间的方法: 1) java.util.Calendar long now = Calendar.getInstance().getTimeInMillis(); 这很好,但是(据我所知)将日历对象设置为当前时间的唯一方法是调用Calendar.getInstance(),每次调用getInstance()都会创建一个新的int[] 2) android.

我试图在Android应用程序的Draw()循环中尽可能多地删除对象创建,以最小化垃圾收集,但我在处理时间方面遇到了麻烦。我知道两种获取当前时间的方法:

1) java.util.Calendar

long now = Calendar.getInstance().getTimeInMillis();
这很好,但是(据我所知)将日历对象设置为当前时间的唯一方法是调用Calendar.getInstance(),每次调用getInstance()都会创建一个新的int[]

2) android.text.format.Time

Time time = new Time();
time.setToNow();
long now = time.toMillis(true);
这可以在每次调用时不实例化任何新对象的情况下完成,但是setToNow()似乎只精确到最近的一秒


我如何才能得到当前系统时间,精确到毫,而不会在我的绘制循环中产生垃圾收集?

我想你只是在寻找。就我个人而言,我会将这种静态依赖性提取到
时钟
接口,尽管:

public interface Clock {
    long currentTimeMillis();
}
然后您可以有一个
SystemClock
实现,以及一个用于测试目的的假实现。如果您没有对这段代码进行单元测试,那么它就不那么重要了


还要注意的是,如果您试图测量经过的时间,应该改为使用。

我使用DDMS来查看实例化的内容。这是非常明显的,因为它是我的绘图循环中唯一发生的实例化,所以当我添加一个“calendar=calendar.getInstance();”到draw()。
System.currentTimeMillis()
?Nambari,你是对的,但是GC需要时间,这可能会在速度较慢的设备上导致应用程序动画中出现明显的口吃,所以我试着把它最小化。谢谢,我知道我忘记了一些显而易见的事情!