我有一个接收屏幕活动的课程,每当屏幕解锁时都会运行以下行。
Intent intent = new Intent(context, myService.class);
context.startService(intent);
我的问题是每次屏幕解锁时都会运行我的服务onCreate()。这导致myService的多个副本在我只需要一个时运行。我尝试了各种解决方案,但无济于事。我的理解是,如果服务正在运行,那么onCreate()将被传递并直接进入onStartCommand()。
在执行此代码之前,我已经提取了一系列正在运行的服务,并且从未列出myService。
不确定我在这里做错了什么......
答案 0 :(得分:0)
我曾经遇到过同样的问题。 最后,我发现这是因为我每次调用onStartCommand()时都使用了stopSelf(msg.arg1)。我通过简单地删除stopSelf()来解决问题。希望它有所帮助。
答案 1 :(得分:-1)
要防止每次启动服务时都要调用oncreate,请从START_STICKY
返回onStartCommand
。这将保持服务,直到你杀死它。
@Override
public void onCreate() {
// get the notification manager
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// other stuff etc.
context = this.getApplicationContext();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// the service is started so after all clients are unbound it stays
// running
return Service.START_STICKY;
}
祝你好运