应用程序无响应(ANR)执行服务android

问题描述 投票:3回答:2

host.activity是我的包,host.framework.ServicePromemoria是一个android服务。

这个错误是什么意思?

android service runtime-error
2个回答
7
投票

这意味着您的服务正在执行相当长的操作(大多数ANR来自大于5秒的操作)并且正在UI线程上执行此操作。这可以是网络任务,数据库任务,也可以是其他一些长操作。

您可以通过使用ThreadAsyncTask在主UI线程中运行服务中的任务来解决此问题。

事实上,您可以直接将服务启动到新线程,如下所示:

Thread t = new Thread(){
public void run(){
getApplicationContext().bindService(
        new Intent(getApplicationContext(), YourService.class),
        serviceConnection,
        Context.BIND_AUTO_CREATE
    );
}
};
t.start();

此外,如果您需要它以供以后使用,请缓存bindservice返回的值(如果有)。


0
投票

虽然有一个公认的答案,但我想在这里添加一些额外的东西。“应用程序无响应(ANR)执行服务android”的原因是你的服务在超时期间没有完成它的生命周期调用(如onCreate)。并且正常服务的默认超时为20秒。如果你需要在Servcie onCreate中运行一个块,你需要启动一个新线程,或者你可以使用IntentService。

© www.soinside.com 2019 - 2024. All rights reserved.