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

原文 标签 java android service

这可能是一个愚蠢的问题,所以请原谅我。我还在学习java-android。
因此,出于学习目的,我创建了无用的程序。
1. Activity 启动时会启动一个简单的服务
2.服务注册广播接收器(监听传入的短信)
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。然后调用并执行完成()(我在我的 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 - Java 2D游戏中的碰撞检测

java - 在批处理运行期间检查 NPE

ios - iOS中的后台获取

java - 是否可以将ANTLR3语法转换为正则表达式?

java - 正则表达式替换电子邮件

android - Android P API 28 中已弃用的 ConnectivityManager.TYPE_WIFI 的替代方法是什么?

android - 有没有办法在 native react 中运行前台服务?

android - 我们应该为 Rxjava3 使用哪个 rxjava3 改造适配器

java - 通过服务管理与mysql的连接

android - 具有IntentService的Android RxJava间隔