android - 如果应用程序正在运行,如何检查前台服务?

标签 android service foreground-service

在我的应用程序中,我有前台服务,它的工作方式不同,具体取决于它所属的应用程序的存在。

用户可以切换到“最近”屏幕并将应用程序踢出内存。由于 Application 类没有 onDestroy 方法,我不知道它是否正在运行。

如果应用程序正在运行,有没有办法检查前台服务?

最佳答案

没有合适的方法来做到这一点。您可以使用的一种解决方法是从您的 Activity 正常启动服务并覆盖 onTaskRemoved 方法。当您的应用程序从最近使用的应用程序屏幕中删除时,将调用此方法。您可以在主服务类中设置全局静态变量,稍后访问它们以确定应用程序是否被终止。

这是服务代码:

您的前台服务:

Kotlin :

class ForegroundService : Service() {

    companion object {
        // this can be used to check if the app is running or not
        @JvmField  var isAppInForeground: Boolean = true
    }

    ...

}

Java:

class ForegroundService extends Service {

    public static boolean isAppInForeground = true;

}

检查应用状态的服务:

Kotlin :

AppKillService.kt

class AppKillService : Service() {
    override fun onBind(p0: Intent?): IBinder? {
        return null
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        // service is started, app is in foreground, set global variable
        ForegroundService.isAppInForeground = true
        return START_NOT_STICKY
    }

    override fun onTaskRemoved(rootIntent: Intent?) {
        super.onTaskRemoved(rootIntent)
        // app is killed from recent apps screen, do your work here
        // you can set global static variable to use it later on
        // e.g.
        ForegroundService.isAppInForeground = false
    }
}

Java:

AppKillService.java

public class AppKillService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // service is started, app is in foreground, set global variable
        ForegroundService.isAppInForeground = true;
        return START_NOT_STICKY;
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        // app is killed from recent apps screen, do your work here
        // you can set global static variable to use it later on
        // e.g.
        ForegroundService.isAppInForeground = false;
    }
}

在你的MainActivity中:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // start your service like this
        startService(Intent(this, AppKillService::class.java))
    }
}

关于android - 如果应用程序正在运行,如何检查前台服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326315/

相关文章:

angular - 什么将两个组成部分定义为家庭?

android - 如何在 Spotify 和 Google Music 等后台播放音乐时关闭通知

java - 将日期(TextView)添加到 SQLite 数据库中

java - 如何从同一 View 动态地膨胀不同的上下文菜单

android - 使用现有的 .keystore 签署 android apk

android - 我可以在 FirebaseMessagingService 中启动前台任务吗?

android - 小米设备停止前台服务

Android Actionbar + FragmentActivity

sql - 授予对所有服务代理对象的权限

android - 为什么Android服务在测试时不是单例的?