当前位置: 首页 > 知识库问答 >
问题:

前台服务已终止且未重新启动

谷梁淇
2023-03-14

我用Android BLE(蓝牙低能)开发了一个应用程序,它工作得很好,但当Android需要更多内存时,我的服务就被干掉了。

>

  • 我正在使用具有单独进程的前台服务。

    <接收器Android:name=“.BluetoOthleservice$MyReceiver”/>

     startService(new Intent(this, BluetoothLeService.class));
    

    为我效劳:

        @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
        SetNotification(0);
        return START_STICKY;
    }
    

    但当我的服务被操作系统杀死时,它就不会重新启动。我已经尝试关闭所有最近的应用程序,但没有得到任何解决方案....

    对此有什么解决办法吗?请帮帮我.任何帮助都将不胜感激。提前谢谢你。

    ...
                    startService(new Intent(this, BluetoothLeService.class));
    
     @Override
    public void onDestroy() {
        unregisterReceiver(mReceiver); // receiver for bt on and bt off
        super.onDestroy();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
        SetNotification(0);
        return START_STICKY;
    }
    
        @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    
    
    public void SetNotification(int VerdeRosso){
    
        if (VerdeRosso == 1) { // connected
            remoteViews = new RemoteViews(getPackageName(), R.layout.notification_connesso);
        }else {
            remoteViews = new RemoteViews(getPackageName(), R.layout.notification_disconnesso);
        }
        mBuilder = new NotificationCompat.Builder(getApplicationContext());
        mBuilder.setContent(remoteViews);
        mBuilder.setSmallIcon(R.mipmap.ic_launcher);
        startForeground(123, mBuilder.build()); // 123 è l'id a caso
    }
    
       @Override
    public void onCreate() {
    
    
        mBluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
        mBluetoothAdapter = mBluetoothManager.getAdapter();
    
        //broadcaster = LocalBroadcastManager.getInstance(this);
    
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        mReceiver = new MyReceiver();
    
        registerReceiver(mReceiver, filter);
        scanLeDevice(true);
    
    }
    

    ---编辑2

        private final IBinder myBinder = new LocalBinder();
    
    public class LocalBinder extends Binder {
        BluetoothLeService getService() {
            return BluetoothLeService.this;
        }
    }
    ....
        @Override
    public IBinder onBind(Intent intent) {
    
        return myBinder;
    }
    
  • 共有1个答案

    楚灿
    2023-03-14

    您可以通过以下方式检查服务何时被终止并重新启动:

    @Override
        public void onLowMemory() {
            //Send broadcast to the Activity to kill this service and restart it.
            super.onLowMemory();
        }
    
    @Override
        public void onTaskRemoved(Intent rootIntent)
        {
                //Send broadcast to the Activity to restart the service
                super.onDestroy();
        }
    

    你可以做两个广播或只有一个以上这些。

     类似资料:
    • 我正在构建一个应用程序来检测Android上的iBeacons。基本功能是通过信标将广告数据存储到设备上,并将其上传到服务器。为此,我正在使用Android信标库。 当应用程序在非活动约30分钟后进入区域时发生的事件序列 首先,在didExit(图像) 之后重新启动,在这里您可以看到从区域11切换到区域9。中途应用程序关闭并立即重新触发,但没有发送推送 在第二个didExit(Image) 后退出

    • 我们在Android8.1及以上版本中偶然发现了一个我们以前从未见过的问题,不幸的是,这使得我们的应用程序对我们的用户来说不太方便。在Android 8.1及以上版本中,当用户刷屏杀死应用程序时,后台粘性服务不会重新启动。

    • 我创建了一个跟踪设备移动位置的服务。服务由绑定到它的活动启动,在该活动中有一个“开始跟踪”按钮。当按下这个按钮时,我需要服务在前台启动,这样它就可以存储设备移动到的位置,即使与它绑定的活动已经关闭,或者应用程序被最小化。 以下是我的服务:

    • 问题内容: 我已经从http://jenkins-ci.org/content/thank-you-downloading-windows- installer 下载了“ jenkins-1.501.zip” 。 我已经解压缩了zip文件,并在Windows 7上成功安装了Jenkins。詹金斯的表现不错。我想从控制台停止Jenkins服务。我怎样才能做到这一点?通过控制台/命令行启动和重新启动的

    • 请原谅我没有经验,我对此很陌生。今天早些时候我在数字海洋上为我的世界设置了一个服务器。我运行命令,用java-xmx1024m-xms1024m-jar minecraft_server.1.15.2.jar nogui创建世界,并创建了一个屏幕。它使我能够访问控制台,在那里我可以键入类似/op和其他命令。后来,我关闭了,现在当我试图重新加入时,我不知道如何回到控制台。我有超过1人在服务器上,谁是

    • 当我的应用程序前台服务被终止时,不会收到FCM通知,更清楚的是,我正试图让我的应用程序始终在后台运行,我使用前台服务来实现这一点,有时应用程序未被ANDROID系统终止,前台通知会出现15个多小时,但其他情况下,当我的前台通知被终止,并且我发送FCM通知时,它在1小时或更短时间内被终止,而我的设备没有收到FCM通知!!这里有什么问题!我怎样才能解决它!