Android 服务成员变量在 运行 一段时间后变为空

Android Service member variable goes null after running for some time

我正在尝试创建一个前台服务来与蓝牙设备进行通信,我已经使用以下结构完成了此操作:

使用服务,也注册了一个BroadcastReceiver作为私有成员变量(处理Gatt事件),然后使用startService命令启动服务。然后,我在当前 Activity 中绑定到该服务。在 onStartCommand 内部,我分配了一个 BluetoothDevice 对象 (my_device),该对象在 onStartCommand 意图中作为额外传递给服务中的成员变量。但是,在服务具有 运行 并且分配了成员变量之后,当我尝试在处理 BLE Gatt 事件的 BroadcastReceiver 中执行任何操作时,它会以某种方式丢失该成员变量实例并且它再次变为 null。

public final class My_BLEService extends Service { 
  private My_BLEDevice my_device = null;

    private BroadcastReceiver gattUpdateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Problem: my_device is null inside this function
        }
    };

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Create the Foreground notification
        if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {
            // Get BluetoothDevice object
            if(this.my_device == null) {
                // Initialize the my_device object
                BluetoothDevice bleDevice = intent.getParcelableExtra(My_AppManager.RFSTAR);
                this.my_device = new my_BLEDevice(bleDevice);
            }
            // Connect to the bluetooth device first thing:
            if(!this.isConnected) {
                this.connect();
            }

            // Start up the broadcast receiver here
            if(!this.receiverRegistered) {
                registerReceiver(this.gattUpdateReceiver, this.bleIntentFilter());
                this.receiverRegistered = true;
            }

            Intent notificationIntent = new Intent(My_BLEService.this, MonitoringActivity.class);
            // FIXME: Necessary? - notificationIntent.putExtra(My_AppManager.RFSTAR, bleDevice);
            notificationIntent.setAction(Constants.ACTION.MAIN_ACTION);
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            Bitmap icon = BitmapFactory.decodeResource(getResources(),
                R.drawable.logo_md);

            // TODO: Add close button
            Notification notification = new NotificationCompat.Builder(this)
                    .setContentTitle("BLE Monitor")
                    .setTicker("BLE Monitor")
                    .setContentText("BLE")
                     // TODO; This isn't appearing correctly the first time
                    .setSmallIcon(R.drawable.logo_md)
                    //.setLargeIcon(
                    //        Bitmap.createScaledBitmap(icon, 128, 128, false))
                    .setContentIntent(pendingIntent)
                    // Note: this doesn't seem to do anything (setting it to false doesn't change it either)
                    .setOngoing(true).build();

            startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, notification);
        } else if (intent.getAction().equals(Constants.ACTION.STOPFOREGROUND_ACTION)) {
            if(this.receiverRegistered) {
                unregisterReceiver(this.gattUpdateReceiver);
                this.receiverRegistered = false;
            }
            if(this.isConnected) {
                this.disconnect();
            }
            stopForeground(true);
            stopSelf();
        }
        return START_STICKY;
}

好吧,我自己创造的问题。问题是,在我的服务中,我在 onBind 方法中重置了成员变量 my_device:

public IBinder onBind(Intent intent) {
    this.my_device = intent.getParcelableExtra(Kidpod_AppManager.RFSTAR);
    return this.kBinder;
}

有一个在 activity 中调用 bindService 方法时未设置的额外项,因此将其设置为 null。