Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android服务正在执行两次_Android_Service_Handler - Fatal编程技术网

Android服务正在执行两次

Android服务正在执行两次,android,service,handler,Android,Service,Handler,我正在制作一个android应用程序。 我通过在主活动的onCreate方法中调用方法startService来启动启动活动中的服务 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getActionBar().hide(); setContentView(R.layout.activity_main);

我正在制作一个android应用程序。 我通过在主活动的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方法只调用一次。尝试了一个标志,但变量已重新启动


有什么帮助吗?或通知?

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

在没有看到更多代码的情况下,我可以看到的解决方案是在starService()中添加一个标志

然后:

放置一个
Log.e(标记“---onStart()--”)
Log.e(标记“--onStartCommand()--”)在各自的方法中

在“error”下检查LogCat,如果同时看到这两个日志,则会调用这两个方法

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


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

你能多发一些这项服务吗?另外,您在哪里调用startService()?我在启动器活动的onCreate方法中调用starService()。该服务的方法中只有toast msg:onStartCommand和onStartCommand检查我的答案是否准确。你是说我看到两次toast msg,因为我在两个方法中都放了两个toast msg?是的,但是每个吐司都有不同的味精,“开始时吐司”和“startCommand中吐司”,我在几秒钟内看到这两个词……啊,看到了吗,这些都是最初需要提供的细节。你做日志了吗?发生了什么?试着,我仍然可以看到该服务正在执行两次。你需要发布你的代码,从你发布的代码片段中无法判断。
private Boolean flag = true;
private void starService() {
 if (flag){
    startService(new Intent(getBaseContext(), HelenaService.class));
    flag = false;
    }
}
String TAG = CLASSNAME.class.getConicalName();