Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 永久广播接收机_Android - Fatal编程技术网

Android 永久广播接收机

Android 永久广播接收机,android,Android,我正在编写的应用程序有问题。 每次播放时,我都需要接收ACTION\u SCREEN\u ON、ACTION\u SCREEN\u OFF和ACTION\u USER\u PRESENT意图,所以我的应用程序当然会保留在后台。目前,我的应用程序由设置活动和服务创建。ScreenReceiver是一个BroadcastReceiver,它获取操作屏幕意图,而UnlockReceiver获取操作用户当前意图。服务注册和注销接收者: public class MainService extends S

我正在编写的应用程序有问题。
每次播放时,我都需要接收ACTION\u SCREEN\u ON、ACTION\u SCREEN\u OFF和ACTION\u USER\u PRESENT意图,所以我的应用程序当然会保留在后台。目前,我的应用程序由设置活动和服务创建。ScreenReceiver是一个BroadcastReceiver,它获取操作屏幕意图,而UnlockReceiver获取操作用户当前意图。服务注册和注销接收者:

public class MainService extends Service {
    ScreenReceiver screenReceiver = null;
    UnlockReceiver unlockReceiver = null;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onStart(Intent intent, int startId) {
        doStart();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        doStart();

        return START_STICKY;
    }

    public void doStart() {
        if(screenReceiver != null && unlockReceiver != null)
            return;

        IntentFilter filter;

        if(screenReceiver == null) {
            filter = new IntentFilter();
            filter.addAction(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);

            screenReceiver = new ScreenReceiver();
            registerReceiver(screenReceiver, filter);
        }

        if(unlockReceiver == null) {
            filter = new IntentFilter();
            filter.addAction(Intent.ACTION_USER_PRESENT);

            unlockReceiver = new UnlockReceiver();
            registerReceiver(unlockReceiver, filter);
        }
    }

    @Override
    public void onDestroy() {
        if(screenReceiver != null)
            unregisterReceiver(screenReceiver);

        if(unlockReceiver != null)
            unregisterReceiver(unlockReceiver);
    }
}  
但有时安卓会终止我的服务,释放一些内存,然后重新启动。杀戮和重生之间的时间通常在5秒左右,但有时这可能会让我的应用程序的用户错过一些可能会导致问题的意图。这些意图只能通过trought registerReceiver注册,因此我无法在清单中注册它们。我怎么能在没有被杀或遗漏的情况下倾听这些意图呢

谢谢

我怎么能在没有被杀或遗漏的情况下倾听这些意图呢

你没有。你重写你的应用程序,要么不使用这些广播,要么在缺少广播的情况下更具弹性。毕竟,不仅仅是“Android杀死我的服务以释放一些RAM,然后重新启动”,而是任务管理器之类的东西可以摆脱你的服务