防止在android中重启服务

时间:2016-12-14 10:37:04

标签: android service android-service

我尝试在我的Android应用程序中使用服务,但我有一个问题。当我在屏幕锁定服务运行中断后按下开/关按钮时,看起来服务正在重启。这是我的代码:

public class MyService extends Service {
private static String TAG = "Service";

@Override
public void onCreate() {
  super.onCreate();
  Log.i(TAG, "onCreate");

}

@Override
public IBinder onBind(Intent intent) {
  return null;
}

@Override
public void onDestroy() {
  Log.i(TAG, "Destroyed");
  super.onDestroy();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
  Log.i(TAG, "OnStartcommmand");
  return START_STICKY;
 }

 }

为什么我的服务重启很多次?我怎样才能阻止服务重启?可能吗 ? 感谢

1 个答案:

答案 0 :(得分:3)

您的Service被系统杀死,以便为更高优先级的应用节省资源(例如:当手机内存不足时)。被杀后,可以根据Service上返回的值重新创建onStartCommand。如果您在START_STICKY上返回onStartCommand,系统会在杀死服务后重新创建您的服务。否则,START_NOT_STICKY告诉操作系统不要再次重新创建服务。

您可以考虑使用startForeground方法让您的Service保持活力。这是文档:

  

启动的服务可以使用startForeground(int,Notification)API   将服务置于系统考虑的前台状态   它是用户积极意识到的东西,因此不是   当内存不足时被杀的候选人。 (理论上还是如此   可能会在极端记忆压力下杀死该服务   从当前的前台应用程序,但在实践中这应该   不要担心。)