这已被问了很多次,我已经看到并应用了很多答案,但似乎没有任何帮助。
这就是我在应用程序启动时启动服务器的方式
startService(new Intent(MavsMainActivity.this, LocationUpdateService.class));
清单
<service android:name=".myservices.services.LocationUpdateService"
android:process=":locationService"
/>
当我强行关闭应用程序时,它会再次触发onCreate()
服务。我尝试了return START_STICKY
和return START_NOT_STICKY
,重新启动Application onDestroy
上的服务,并在用户分别销毁应用程序后重新启动应用程序时重新启动它。
这是我的服务类,请指导我如何在后台运行服务,即使用户破坏了应用程序。
@Override
public void onCreate() {
if (isGooglePlayServicesAvailable()) {
/* min dist for location change, here it is 10 meter */
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
Toast.makeText(getApplicationContext(), "Service created", Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand: ");
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(BACKGROUND_INTERVAL);
mLocationRequest.setFastestInterval(30000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setSmallestDisplacement(20);
sendOfflineData();
Toast.makeText(getApplicationContext(), "onStart Called", Toast.LENGTH_SHORT).show();
return START_STICKY ;
}
答案 0 :(得分:3)
您必须使用IntentService
代替Service
为什么?
服务:服务在后台运行,但它在应用程序的主线程上运行。
IntentService: IntentService在单独的工作线程上运行。
在Application Destroy服务停止并重新启动它,如果你返回START_STICKY
,因为它的seprate线程在主应用程序线程上运行。
您应该IntentService
并在此处查看details。