0

我正在开发一个 XMPP 聊天客户端。我正在使用后台服务连接到网络 XMPP 服务器。但是当我启动服务器时,它会在 UI 线程上给出网络异常。当我将 Android SDK 降级到 8 时,它会给出 ANR 异常

我尝试从 SPlash 屏幕的 onCreate 方法启动服务。

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                Intent serviceIntent=new Intent();
                serviceIntent.setClass(getApplicationContext(), SeetiService.class);
                startService(serviceIntent);


            }
        };
        new Thread(runnable).start();
        Thread serviceThread=new Thread()
        {
            public void run()
            {
                Intent serviceIntent=new Intent();
                serviceIntent.setClass(getApplicationContext(), SeetiService.class);
                startService(serviceIntent);

            }
        };
        serviceThread.start();

但我仍然在主 UI 线程上获得相同的网络。

有人可以帮忙吗?

谢谢

4

1 回答 1

1

看来您正在尝试同时启动两个服务。AFAIK 您无法使用上面的代码启动它。但我将说明您为什么面临 ANR。

Intent serviceIntent=new Intent();
serviceIntent.setClass(getApplicationContext(), SeetiService.class);
startService(serviceIntent);

上面的代码应该在 UI 线程上运行。如果你想从另一个线程运行它,你必须将它嵌入到 runOnUiThread。所以你的块应该看起来像。

Runnable runnable = new Runnable()
{@Override
  public void run()
  {

    runOnUiThread(new Runnable()
    {
      public void run()
      {
        Intent serviceIntent = new Intent();
        serviceIntent.setClass(getApplicationContext(), SeetiService.class);
        startService(serviceIntent);
      }
    });

  }
};
new Thread(runnable).start();
于 2012-06-22T13:20:55.323 回答