在应用程序的整个生命周期内在启动时运行的Android线程

时间:2012-10-04 22:16:23

标签: android

我正在制作一个角色的RPG风格游戏,我希望角色的当前健康状况每隔一段时间就会增加,直到它完全健康。

我搜索了很多文章和帖子,我似乎无法找到任何可以做到的事情。我的想法是在扩展Application的全局var类中创建一个Thread或Handler。

我正在使用

 @Override
 public void onCreate()
 {
    super.onCreate();
    thread = new Thread() {
        public void run() {
            // do something here
            System.out.println("GlobalVars - Sleeping");
            handler.postDelayed(this, 10000);
        }
    };
    thread.start();
}

而不仅仅是打印,我将进行函数调用。这是实现这个目标的好方法吗?我是否可以为此线程实现onPause和onResume,因为应用程序被电话打断或者他们点击了主页按钮?

由于

1 个答案:

答案 0 :(得分:0)

您不需要(或想要)另一个线程。而是从时间计算健康。

long health = 1; // about to die
long healthAsOf = System.currentTimeMillis(); // when was health last calculated
long maxHealth = 100; // can't be more healthy than 100
long millisPerHealth = 60*1000; // every minute become 1 more healthy

public synchronized long getHealth() {

    long now = System.currentTimeMillis();
    long delta = now-healthAsOf;
    if( delta < millisPerHealth ) return health;
    long healthGain = delta/millsPerHealth;
    healthAsOf += millsPerHealth * healthGain;
    health = Math.min( maxHealth, health+healthGain );
    return health;

}

public synchronized void adjustForPause( long pauseMillis ) {

    healthAsOf += pauseMillis;

}

PS:您可能只希望在每个帧的开头只抓取一次时间,这样框架就不会在稍微不同的时间进行操作。