我有一个相当好奇的问题。我有一个非绑定服务,当应用程序打开时,我使用主要活动中的以下代码调用该服务。

//some code checks if the service is awake. if not then the code below is called        
Intent serviceIntent = new Intent(this, SMS_Listener_Service.class);
startService(serviceIntent);

当新的短信进来时,服务通过计时器等待 3 秒,以确保内容观察者已将数据保存到内部短信数据库中。之后,它会调用意图服务来完成繁重的工作。

由于未知原因,服务有时会挂起并卡在“重新启动(见图)”

奇怪的是,即使尝试在应用程序部分强制停止服务也不起作用。它会暂时消失,然后再次出现并显示相同的消息。在代码中使用 stopService 也不起作用,并且服务中的 OnDestroy 方法永远不会被调用。唯一的解决方法是重新启动手机。

问题是,当它处于这种状态时,它不起作用。(它的意思是解析传入的短信)

我在 Galaxy Note 3 上运行 Android 4.3

"Hanging Service"

我的怀疑是,执行实际解析的 Intentservice 未完成,因此永远不会调用服务停止自身的调用。

我的问题是,有没有办法强制已挂起的意图服务停止?

这是服务中 StartCommand 中的代码

  public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    if (!blnAutoSyncisEnabled) {
        stopSelf();
        return 0;
    } else {
        return START_STICKY;

    }

 }

此处同一问题的更详细视图 https://stackoverflow.com/posts/21077517/edit

有帮助吗?

解决方案

这可能不是一个非常优雅的解决方案,但您可以调用 stopSelf() 直接在服务中 onCreate() 方法并处理其中的实际操作 onDestroy() 打电话之前 super.onDestroy().

我有一个类似的问题,我用这种方式解决了。也许这也能解决你的问题。祝你好运。;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top