防止多个服务实例

时间:2017-12-20 14:29:47

标签: android service

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

 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”并启动两项服务

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

1 个答案:

答案 0 :(得分:0)

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