java - 如果从同一文件调用,服务将被销毁,但如果创建该服务的对象(并从单独的文件调用),则服务不会被销毁

标签 java android service

这可能是一个愚蠢的问题,所以请原谅我。我还在学习java-android。 因此,出于学习目的,我创建了无用的程序。 1. 当 Activity 启动时,它会启动一个简单的服务 2. 服务注册广播接收器(监听传入的 SMS 消息) 3. 当 SMS 消息到达时,服务应自行停止。

这是我的代码:(服务类)

// This is my service class. Lifecycle methods are ommited
public void finish() {
    Log.d("APP", "finish called");
    stopSelf();

}

以下是我的广播接收器(在单独的文件中)

@Override
public void onReceive(Context context, Intent intent) {

    Log.d("APP", "SMS Received");

    new MyService().finish();
}

因此,当消息到达时 onReceive 就会被触发。然后调用并执行 finish() (我在 LOGCAT 中看到),但服务永远不会被破坏。

另一方面,如果我在我的服务类中这样做:

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

    finish();


    return START_STICKY;
}

然后服务被创建,然后被销毁。为什么要以这种方式工作,而不是以其他方式工作?

最佳答案

这是因为您在 onReceive 方法中实例化了一项服务,而不是使用现有的服务。因此,您只需要引用您的令人兴奋的服务实例,然后您应该对其调用 finish() 方法。

关于java - 如果从同一文件调用,服务将被销毁,但如果创建该服务的对象(并从单独的文件调用),则服务不会被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17794802/

相关文章:

java - 使用反射启动 JavaFX 项目

求Android ExoPlayer很慢

android - 将相机渲染到多个表面 - 屏幕上和屏幕外

android - 使用 picasso 从网址保存图像?

AngularJS: Controller 与服务

android - 管理 Android 应用程序的生命周期

java - Play Framework 入口点

java - Spring Batch 中是否可以抛出致命的不可回滚异常?

python - 如何将 Flask/gunicorn 应用程序作为 systemd 服务运行

Java 在运行时确定类型 T