防止多个服务实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防止多个服务实例相关的知识,希望对你有一定的参考价值。

我有一项启动和停止服务的活动。这似乎很简单,但如果我开始服务并停止它就可以了。 但是当我重新启动服务时,我发现了两个服务实例。 为什么?

 public class Test extends AppCompatActivity implements View.OnClickListener {
       @Override
public void onClick(View v) {
    switch ( v.getId() ) {

        case R.id.InitButton:
        {
            startMonitor();
        }
        break;
        case R.id.EndButton:
        {
            stopMonitor();
        }
        break;
        case R.id.SendData:
        {
            sendData();
        }
        break;
        default:
            break;
    }
}

    ...

  private void startMonitor(){

    Intent intent = new Intent( this, MyService.class );
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |  Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);


    startService( intent );

}

private void stopMonitor(){

    Intent intent = new Intent( this, MyService.class );
    stopService( intent );

}

如果我点击“initButton”服务启动 然后我点击“EndButton”和服务结束 然后我再次单击“initButton”并启动两个服务

我看到帖子建议,但是当我停止活动时我的服务没有运行

答案

我强烈建议任何开发者阅读“四人帮”。在您的情况下,singleton设计确保一次只运行一个类的单个实例。通过defult,启动的服务应该只有一个实例,无论它启动多少次。这个标志Intent.FLAG_ACTIVITY_NEW_TASK它会出现另一个任务,即使其中一个已经运行。尝试删除标志,然后使其成为单身,但是使服务单身不会伤害任何东西(假设你想要一个实例)

以上是关于防止多个服务实例的主要内容,如果未能解决你的问题,请参考以下文章

防止多个服务实例

如何防止创建相同片段的 2 个实例?

无法防止来自不同用户的同一程序的多个实例[重复]

一个 AsynckTask 的多个回调

如何防止 start-stop-daemon 在 cronjob 中创建多个实例?

Android 片段问题的多个实例