3

我宣布了一项服务,它将作为一个队列。因此我有一个变量告诉服务它是第一次启动和另一个存储值的变量。

代码如下所示:

public class TTSQueue extends Service {

private Integer lastvol = 0;
private Boolean isFirstStart = true;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Bundle b = intent.getExtras();
    Integer vol = b.getInt(TTS.PARAM_LAST_VOL, 0);
    if (vol > lastvol) {
        lastvol = vol;
    }
    if (isFirstStart) {
        isFirstStart = false;
        startAnotherService();
    } else {
        waitForAnEventAndThen_startAnotherService();
    }

}

好的,问题是,这个Service是从一个receiver启动的。并且每次启动时,两者都lastvolisFirstStart重置。我想,如果服务已经创建然后以 Intent 启动,它只会onStartCommand()再次调用而不重置所有内容。

我还尝试只声明变量并将它们设置为 中的默认值onCreate(),但这具有相同的效果。我也尝试用 替换ServiceIntentService但这也无济于事,同样的问题。

我想避免使用SharedPreferences,因为我认为在这种情况下不一定需要它。(而且我不想浪费用户的写入周期)。

我错过了什么吗?我想这不是因为private声明,是吗?

4

1 回答 1

0

这肯定与成员的私密性无关。

我不确定是什么问题,但我可以想象以下候选人之一:

  • 该服务在第二个请求到达之前终止。
  • 产生一个新进程,Receiver因为它响应“系统意图”。

您可以通过让您的服务定期记录某些内容来评估这种猜测。

于 2012-01-19T21:14:54.697 回答