当前位置: 首页 > 知识库问答 >
问题:

当应用程序在后台时,意图服务在android 9上正常运行

房学文
2023-03-14
adb shell am broadcast -a android.intent.action.TEST --es maxCountValue 10 -n com.example.servicedemo/.MyReceiver
enter code here
class MyReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Toast.makeText(context, "CompleteReceiver", Toast.LENGTH_LONG).show()
        if (intent!!.action.equals("android.intent.action.TEST")) {
            val mIntent = Intent(context, MyIntentService::class.java).apply {
                Log.v("MyIntentService", intent.data.toString())
                this.putExtra("maxCountValue", 100)
            }
            context?.startService(mIntent)
        }
    }
}

意向服务

private const val SERVICE_NAME = "MyIntentService"

class MyIntentService : IntentService(SERVICE_NAME) {
    private val handler = Handler()

    override fun onCreate() {
        super.onCreate()
        showToast("Job Execution Started")
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        showToast("Job Execution onStartCommand")
        return super.onStartCommand(intent, flags, startId)
    }

    override fun onDestroy() {
        super.onDestroy()
        showToast("Job Execution onDestroy")
    }
    override fun onHandleIntent(intent: Intent?) {
        val maxCount = intent!!.getIntExtra("maxCountValue", -1)

        for (i in 0 until maxCount) {
            Log.d(SERVICE_NAME, "onHandleWork: The number is: $i")
            try {
                Thread.sleep(100)
            } catch (e: InterruptedException) {
                Log.d(SERVICE_NAME, "Exception: ")
                e.printStackTrace()
            }
        }
    }

    private fun showToast(msg: String) {
        handler.post {
            Toast.makeText(this@MyIntentService, msg, Toast.LENGTH_LONG).show()
        }
    }
}

舱单:

<service android:name=".MyIntentService"/>

        <receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.TEST" />
            </intent-filter>
        </receiver>

共有1个答案

酆恩
2023-03-14

“出于服务限制的目的,后台的定义与内存管理使用的定义不同;应用程序可能在后台与内存管理有关,但在前台与它启动服务的能力有关。”

-

https://developer.android.com/about/versions/oreo/background

 类似资料:
  • 我正在使用FCM推送通知。当应用程序处于前台时,应用程序运行良好,并打算启动新活动,但当应用程序处于后台时,它不启动新活动,而是启动默认活动的实例。 }

  • 问题内容: 我有一个媒体播放器服务,可在整个应用程序的后台播放音乐,例如: 问题在于,当用户更改应用程序或进入手机主屏幕(应用程序在后台运行)时,音乐仍在播放。 我试图停止它和方法,但是当我更改活动时这会停止音乐,这是我不希望的(我希望音乐在用户浏览活动时继续播放)。 更新资料 我尝试了广播: 我加了 在音乐服务的onCreate和接收事件的方法中: 在应用程序类中,我这样做: 但是音乐不会恢复

  • FCM服务。NotificationDatabaseHandler是帮助器类。正在保存邮件标题和当前时间。

  • 我只兼职做Android开发(考虑到API的许多细微之处和低级水平,这似乎很有挑战性),并且在我的应用程序处于后台时接收通知有问题。我的目标是Android8.1。我的应用程序碰巧使用了Azure和Xamarin,但我不知道这些细节是否是问题所固有的。 如果我的应用程序在后台,有时会显示通知,但其他时候我的应用程序会因以下错误而崩溃: 我看到这样的文章:https://blog.xamarin.c

  • 据报道,像素设备的Android 11出现了以下崩溃。 致命异常:java.lang.RuntimeException无法启动活动ComponentInfo{}:java.lang.IllegalStateException:不允许启动服务意图{}:应用程序在后台uid UidRecord{} 这只发生在Android 11设备上。谷歌Android 11的服务实现有重大变化吗?

  • 问题内容: 每当用户断开手机通话时,我都希望显示自定义弹出消息。问题是如何检测应用程序何时未运行。任何线索都将有所帮助。 问题答案: 已经有一段时间了,并且已经有了很多发展。 首先,如何在Flutter中创建服务以使应用程序始终在后台运行有一些答案? 此外,使用Flutter插件和地理围栏(在2018年9月),Flutter / Background流程 基本上将使您指向在后台执行中等/执行Dar