Android服务正在执行两次

时间:2015-03-12 19:44:06

标签: android service handler

我正在制作一个Android应用程序。 我通过在主Activity

中的onCreate方法中调用方法startService来启动我的启动活动中的服务
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.getActionBar().hide();
    setContentView(R.layout.activity_main);
    starService();
}


 private void starService() {
        startService(new Intent(getBaseContext(), HelenaService.class));
 }

当我做一个祝酒词,看看我的服务中如何调用这些方法。我看到这个方法被调用了两次..

@Override
public void onStart(Intent intent, int startId) {
  Toast.makeText(this, "service started", Toast.LENGTH_SHORT).show();
}

我的意思是,我可以看到第一个吐司立即呼叫,几秒钟后出现完全相同的吐司信息。

如何确保仅调用onStart方法一次。尝试了一个标志,但变量重新启动。

有任何帮助吗?还是建议?

2 个答案:

答案 0 :(得分:0)

标志变量正在“重新启动”,因为您正在starService()

中启动新服务

如果没有看到更多代码,我可以看到解决方案是在starService()

中放置一个标志
private Boolean flag = true;

然后:

private void starService() {
 if (flag){
    startService(new Intent(getBaseContext(), HelenaService.class));
    flag = false;
    }
}

答案 1 :(得分:0)

String TAG = CLASSNAME.class.getConicalName();

在相应的方法中放置Log.e(TAG, "---onStart()---");Log.e(TAG, "---onStartCommand()---");

检查“错误”下的LogCat,如果您看到这两个日志,则会调用这两种方法。

如果在服务启动时调用了这两个方法,并且它们都包含toast,那么这就是你看到Toast两次的原因。

此外,如果在关闭应用程序后服务继续运行,您可能希望在应用程序设置中强制停止/清除数据。您将需要实现逻辑来停止服务,例如stopSelf();