我有一个作为Web服务器运行的应用程序。该应用程序有一个START_STICKY服务我希望此服务始终运行Web服务器(在通知中向用户提供选项以停止它)。
当我滑动我的应用程序关闭时,问题是服务器重新启动(丢失设置等)。它保持不错,但logcat显示它正在重新启动。
我可以重新打开我的应用并绑定到新服务,这很好用。虽然再次滑动关闭具有相同的效果。
我需要这个不要重启。
标准服务代码
private WebServerService mService;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder binder) {
WebServerService.MyBinder b = (WebServerService.MyBinder) binder;
mService = b.getService();
}
public void onServiceDisconnected(ComponentName className) {
mService = null;
}
};
public serviceStart() {
mIntent = new Intent(mContext.getApplicationContext(), WebServerService.class);
mContext.startService(mIntent);
mContext.bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE);
}
启动时服务
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, START_STICKY, startId);
Log.d("SERVICE","Started");
return START_STICKY;
}
答案 0 :(得分:9)
简短回答:你不能。当系统声明内存或用户从最近的应用列表中清除应用时,每个Android应用都可能被系统或用户杀死。这是Android设计,所有应用都必须遵守它。您可以将唯一(小)改进设置为Foreground service:
系统认为它是用户积极意识到的东西,因此在内存不足时不会被杀死。 (从理论上讲,服务在当前前台应用程序的极端内存压力下被杀死仍然是可能的,但实际上这不应该是一个问题。)
答案 1 :(得分:2)
缺点是您必须提供通知。
答案 2 :(得分:1)
答案 3 :(得分:0)
你的清单上的标签android:process =“anyname”会有用吗?它使服务在您的应用程序的不同进程上运行。
http://developer.android.com/guide/topics/manifest/service-element.html#proc
根据其他人的指定,如果内存不足,系统仍然可以终止它,但是关闭你的应用程序不会终止它。希望它有所帮助。