Java 当应用程序关闭或发送到后台时,如何运行计数器?

Java 当应用程序关闭或发送到后台时,如何运行计数器?,java,android-studio,Java,Android Studio,我正在做一个蚂蚁收集食物的游戏,我试图得到用户离线的时间,这样我就可以计算出蚂蚁应该收集的食物量。我尝试运行timertask和looper来计算onDstroy中的时间,但没有成功。我对其他一些想法持开放态度 @Override public void onCreate() { super.onCreate(); player = MediaPlayer.create(this, R.raw.music); player.setLooping(true); // S

我正在做一个蚂蚁收集食物的游戏,我试图得到用户离线的时间,这样我就可以计算出蚂蚁应该收集的食物量。我尝试运行timertask和looper来计算onDstroy中的时间,但没有成功。我对其他一些想法持开放态度

  @Override
public void onCreate() {
    super.onCreate();
    player = MediaPlayer.create(this, R.raw.music);
    player.setLooping(true); // Set looping
    player.setVolume(left,right);

    SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE);
    offlineTime = prefs.getInt("offline",0);
    onTime = prefs.getInt("ont",0);
    totalTime = prefs.getInt("total",0);

    offlineTime = totalTime - onTime;

    intent = new Intent(BackgroundSoundService.this, LandingActivity.class);
    intent.putExtra("offline", offlineTime);
    startActivity(intent);
    offlineTime = 0;
    totalTime = 0;
    onTime = 0;
}
public int onStartCommand(final Intent intent, int flags, int startId) {
    player.start();
    stopMuOn = true;
    return Service.START_STICKY;
}

public void onStart(Intent intent, int startId) {
    // TO DO
    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
        @Override
        public void run() {
            totalTime++;
            SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt("total",totalTime);
            editor.apply();
        }
    }, 100); // Millisecond 1000 = 1 sec

}
public IBinder onUnBind(Intent arg0) {
    // TO DO Auto-generated method
    return null;
}

public void onStop() {

}
public void onPause() {
    player.pause();
}
@Override
public void onDestroy() {
    SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt("ont",onTime);
    editor.apply();
    player.stop();
    player.release();
}

提前感谢,

当应用程序关闭时,您无需设置计时器。你们不能设置计时器,因为当应用程序关闭时它会被破坏

您只需要像这样获得系统时间

long time = System.currentTimeMillis();
当用户退出时,将此当前系统时间存储在共享首选项中。 当用户重新联机时,从首选项获取savedTime并与新获取的currentTime进行比较

long currentTime = System.currentTimeMillis();

long elapsedTime = currentTime - savedTime;

您的代码缺少很多上下文。只有从底部显示的标签中,我才知道您在谈论Android(因为我是通过Java主题来到这里的,我不熟悉Android类)。如果您正在使用游戏引擎,则显示导入声明并提及游戏引擎会有所帮助。非常感谢它的工作,唯一的问题是玩家可以更改手机时间并假装离线更长时间以获取商品。是的,这是玩家在许多游戏中利用的常见漏洞。要防止这种情况,您需要使用网络时间而不是系统时间。请阅读此链接以供参考。