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

时间:2012-10-24 16:35:47

标签: android service runtime-error

error service

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

这个错误是什么意思?

2 个答案:

答案 0 :(得分: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返回的值(如果有的话)以供以后使用。

答案 1 :(得分:0)

尽管有一个可接受的答案,但我想在这里添加一些其他内容。“执行服务android的应用程序无响应(ANR)”的原因是您的服务在超时期间未完成其生命周期调用(例如onCreate)。正常服务的默认超时为20秒。如果需要在Servcie onCreate中进行块操作,则需要启动一个新线程,也可以只使用IntentService。