Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么服务通常可以';不能在广播接收机中呼叫吗?_Android_Broadcastreceiver - Fatal编程技术网

Android 为什么服务通常可以';不能在广播接收机中呼叫吗?

Android 为什么服务通常可以';不能在广播接收机中呼叫吗?,android,broadcastreceiver,Android,Broadcastreceiver,我一直在读安卓文档,它不断地告诉我,为了避免广播接收器中的日志运行过程。他们说receive可以在短时间内处理操作,但我还不明白为什么会这样 如果允许在广播接收器中长时间运行任务,会发生什么情况?在Android中,GUI事件、服务和接收器在所谓的主线程中运行。这个线程非常重要,您将无法在那里运行长任务(超过几秒钟)。如果您尝试,您将得到一个应用程序没有响应的错误,并且您的应用程序将崩溃 如果它是允许的,比如在旧的黑莓操作系统中,那么你可以在执行长时间任务时阻止用户界面,应用程序就会被冻结。不仅

我一直在读安卓文档,它不断地告诉我,为了避免广播接收器中的日志运行过程。他们说receive可以在短时间内处理操作,但我还不明白为什么会这样


如果允许在广播接收器中长时间运行任务,会发生什么情况?

在Android中,GUI事件、服务和接收器在所谓的主线程中运行。这个线程非常重要,您将无法在那里运行长任务(超过几秒钟)。如果您尝试,您将得到一个应用程序没有响应的错误,并且您的应用程序将崩溃

如果它是允许的,比如在旧的黑莓操作系统中,那么你可以在执行长时间任务时阻止用户界面,应用程序就会被冻结。不仅GUI事件会受到影响,所有其他组件(其他服务和接收器)都会阻塞,直到您完成为止


这就是为什么您应该在后台线程中运行长任务。API已经为这种情况内置了类:AsyncTasks、IntentService和Loader。还有一些库可以简化bg处理,类似截击。

广播接收器用于收听系统范围内的广播,不用于长时间运行的操作。如果您运行它,则ANR可能occur@kalyanpvs如果我们把我们的代码放在worker中,那么我认为这不是一个很好的方法,它会被杀死。他们明确地说它不可用。检查生命周期中的documnet