host.activity是我的包,host.framework.ServicePromemoria是一个Android服务。
这个错误是什么意思?
答案 0 :(得分:7)
这意味着您的服务正在执行相当长的操作(大多数ANR来自大于5秒的操作)并且正在UI线程上执行此操作。这可以是网络任务,数据库任务,也可以是其他一些长期操作。
您可以通过使用Thread或AsyncTask在主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。