0

XMPP チャット クライアントを開発しています。ネットワーク XMPP サーバーに接続するためにバックグラウンド サービスを使用しています。ただし、サーバーを起動すると、ネットワーク オン UI スレッド例外が発生します。Android SDK を 8 にダウングレードすると、ANR 例外が発生します

SPlash画面のonCreateメソッドからServiceを起動してみました。

        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

2 つのサービスを同時に開始しようとしているようです。私の知る限り、上記のコードでは開始できません。しかし、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 に答える