2012-12-21 42 views

回答

2

我想我会在开始时是这样的:

private static long mTotalTime; 
private long mStartTime; 

@Override 
public void onPause() { 
    super.onPause(); 
    mTotalTime += System.currentTimeMillis() - mStartTime; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mStartTime = System.currentTimeMillis(); 
} 

注意,因为它使用的onPause /的onResume它也将“暂停”的计时器,如果屏幕关闭,如果重新定向等等。取决于你的目的是什么,你可能想使用onCreate()或onDestroy()等其他回调函数,但是请注意,当一个新的活动从现有活动启动时,onDestroy()并不总是被调用。

您可能还想将mTotalTime保存到SharedPreferences,以便即使关闭应用程序也可以保留它。也许是这样的:

private long mStartTime; 

@Override 
public void onPause() { 
    super.onPause(); 
    int totalTime = getPreferences(0).getInt("TotalTime",0); 
    getPreferences(0).edit().putInt("TotalTime", totalTime + System.currentTimeMillis() - mStartTime) 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mStartTime = System.currentTimeMillis(); 
} 
4

开始/停止在活动的onResume()onPause()方法中保留的时间。还要安装SCREEN_OFF/SCREEN_ON广播接收器,以便您知道屏幕何时开启和关闭,以及是否启用/禁用您的定时。

+0

onPause()会在屏幕关闭时自动调用吗? – SZH

+0

我不确定是否在屏幕关闭时调用onPause(),但活动生命周期表明它只在另一个活动占用焦点时才被调用,即使在使用锁定屏幕时,也不会因为屏幕关闭/重新开启。 – mah

+0

@mah,我认为它确实被调用。其他网络线程等将继续运行。虽然也许你会希望这是真实的,所以无所事事不会中断任何事情。嗯。有东西要测试。编辑,虽然你不想让游戏线程继续运行..? – Doomsknight

相关问题