host.activity是我的包,host.framework.ServicePromemoria是一个android服务。
这个错误是什么意思?
这意味着您的服务正在执行相当长的操作(大多数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返回的值(如果有)。
虽然有一个公认的答案,但我想在这里添加一些额外的东西。“应用程序无响应(ANR)执行服务android”的原因是你的服务在超时期间没有完成它的生命周期调用(如onCreate)。并且正常服务的默认超时为20秒。如果你需要在Servcie onCreate中运行一个块,你需要启动一个新线程,或者你可以使用IntentService。