Android后台网络服务

时间:2012-06-22 13:13:01

标签: android service xmpp

我正在开发一个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线程上获得相同的网络。

有人能帮忙吗?

由于

1 个答案:

答案 0 :(得分: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();