我有一个始终在运行的后台服务,从我的MainActivity开始。问题是,当MainActivity被销毁时,我的服务重新启动。这种情况是服务停止的唯一情况,因此"始终运行"事情进展顺利。
我想知道为什么会这样,以及我可以做些什么来阻止它。
我的服务不受我的活动约束,因为我不需要它。
服务:
public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener, LocationListener {
...
public LocationService() {
}
@Override
public void onCreate() {
// Some initialization logic here
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
...
}
MainActivity:
public class MainActivity extends BaseActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Start location service in background
Intent intent = new Intent(this, LocationService.class);
startService(intent);
}
}
提前致谢! :d
答案 0 :(得分:2)
我猜是因为我没有足够的数据。当您的MainActivity
被销毁时,托管您的应用程序的操作系统进程中没有活动活动,只有您的Service
。 Android认识到该进程没有托管任何实时活动,因此它会终止进程以释放资源。由于您的Service
返回START_STICKY
,Android会安排您的Service
重新启动。 Service
在新的操作系统进程中重新实例化。
您可以在单独的操作系统过程中运行Service
来测试此理论。只需添加
android:process=":remote"
到<service>
的清单条目。这可能会对您的应用程序产生其他影响,因此请务必理解。
在任何情况下,Android都会随机杀死只托管服务的操作系统进程,即使他们返回START_STICKY
。没有办法阻止这种情况,特别是在资源有限的低端设备上。这是Android的清洁方式; - )