Java Android自定义服务类实现

Java Android自定义服务类实现,java,android,multithreading,location,locationlistener,Java,Android,Multithreading,Location,Locationlistener,在决定如何实现我的后台定制服务类时,我有点困惑 我需要的是: 位置更新和活动识别 RESTAPI调用和Geofence API 我不熟悉Android的后台处理,我不知道如何实现 是否可以创建ThreadPoolExecutor(任务管理器类、runnables等)并处理线程间通信 如果是,是否可以在线程类中侦听位置更新? 现在,我使用这个库()来监听位置更新 有更好的解决办法吗? 非常感谢您的帮助 这是在后台服务中使用谷歌API的最佳方式 你没有解释你所说的活动识别是什么意思 public

在决定如何实现我的后台定制服务类时,我有点困惑

我需要的是:

  • 位置更新和活动识别
  • RESTAPI调用和Geofence API
  • 我不熟悉Android的后台处理,我不知道如何实现

    是否可以创建ThreadPoolExecutor(任务管理器类、runnables等)并处理线程间通信

    如果是,是否可以在线程类中侦听位置更新?

    现在,我使用这个库()来监听位置更新

    有更好的解决办法吗?


    非常感谢您的帮助

    这是在后台服务中使用谷歌API的最佳方式 你没有解释你所说的活动识别是什么意思

    public class MyLocationService extends Service implements LocationListener,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {
    
    private GoogleApiClient mGoogleApiClient;
    private LocationRequest mLocationRequest;
    
    public MyLocationService() {
    
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
    
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API).
                        addConnectionCallbacks(this).
                        addOnConnectionFailedListener(this)
                .build();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mGoogleApiClient.connect();
        Toast.makeText(this, "Location services started", Toast.LENGTH_SHORT).show();
        return super.onStartCommand(intent, flags, startId);
    }
    
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
    
    @Override
    public void onLocationChanged(Location location) {
        System.out.println("MyLocationService.onLocationChanged");
        // TODO with location updateshere
    }
    
    @Override
    public void onConnected(Bundle bundle) {
    
        mLocationRequest = LocationRequest.create();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(1000); // Update location every second
    
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        Location loc = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        sendMyLocUpdate(loc, UserProfile.DRIVER);
    }
    
    @Override
    public void onConnectionSuspended(int i) {
    
    }
    
    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
    
    }
    
    @Override
    public void onDestroy() {
    
        Toast.makeText(this, "Location services stopped", Toast.LENGTH_LONG).show();
    
        Location loc = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        sendMyLocUpdate(loc, UserProfile.PASSENGER);
    
        mGoogleApiClient.disconnect();
        super.onDestroy();
    }
    

    }

    谢谢,但当我关闭应用程序时,此代码将重新启动。如何防止它重新启动?在服务的onStartCommand()方法调用startForeground()和此服务的onDestroy()方法调用stopForeground()方法中,“startForeground()”用于向用户显示(带有通知)服务正在运行(播放音乐、广播等),这与我的情况不同。如果不是您的情况,然后,只有上述服务对您有效,或者您可以添加自己的逻辑。但每当启动此服务的activity destroy启动时,服务都会在activity destroy事件中重新启动