测量屏幕打开的时间

时间:2013-12-28 20:50:08

标签: android timer screen

我的英语不太好,所以我提前道歉。

我想制作一个在屏幕开启时启动的计时器。它应该一直运行直到屏幕关闭然后停止。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

有一个关于处理屏幕开/关事件的好主题:Think Android

而不是启动计时器我宁愿这样做:

int seed;
int step = 1000; // Exactness of timer in ms
long start() {
    return (long) System.getCurrentTimeMillis()/step;
}
long read(long seed) {
    return ((long) System.getCurrentTimeMillis()/step) - seed;
}

if(/*screen on*/) {
    seed = start();
} else if(/*screen off*/) {
    Log.d("time", read(seed)*step + " ms");
}

我认为使用初始种子比开始使用真正的种子更加资源友好且更容易。计时器。

答案 1 :(得分:0)

当屏幕关闭时,您的活动会调用 onPause()方法。在该方法中,您可以获取Unix time并将其保存为变量,这样您就不需要使用计时器或任何其他复杂的方法。屏幕继续显示您的活动应用程序后,活动将调用 onResume()方法,您将获得第二个Unix时间。简单地减去这两个变量,将它们转换为秒,你就可以了。

答案 2 :(得分:0)

你需要一个广播接收器用于屏幕。

public class ScreenReceiver extends BroadcastReceiver {

    private static final String TAG = "Receiver";
    private GregorianCalendar start, end;//or a long in ms

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            start = new GregorianCalendar();
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            end = new GregorianCalendar();
        }
    }   
}

从以下开始:

    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    ScreenReceiver mReceiver = new ScreenReceiver();
    registerReceiver(mReceiver, filter);