5

错误服务

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

这个错误是什么意思?

4

2 回答 2

9

这意味着您的服务正在执行相当长的操作(大多数 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 返回的值(如果有)。

于 2012-10-24T16:46:15.380 回答
3

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

于 2019-03-07T10:15:18.507 回答