1

新しいメールが受信トレイに届くたびに通知を受け取ろうとしています。コードを以下に示します。logCatアプリケーションはまだimapサーバーと通信していますが、しばらくするとアプリケーションが応答しなくなります。しかし、Androidシステムから、このアプリケーションを待つか閉じるように求められます。これは「thread.sleep()」のせいですか?どうすれば解決できますか?

誰かが私を導くことができますか?:/

@Override

public void onStart(Intent intent, int startid) {
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");
    //player.start();
    //add listenser and keep listening
    try{
        folder.addMessageCountListener(new MessageCountAdapter() {//start
            public void messagesAdded(MessageCountEvent ev) {
                Message[] msgs = ev.getMessages();
                // msgs.length

                Log.d(TAG, "It is inside LISTENER");

            }
            });//end    
         for (; ;) {
                Thread.sleep(20000); // sleep for freq milliseconds

                // This is to force the IMAP server to send us
                // EXISTS notifications. 
                Log.d(TAG, "AFTER SLEEP");
                folder.getMessageCount();
                }
    }
    catch(Exception e){

    }

}
4

1 に答える 1

2
  1. onStart非推奨です。onStartCommand代わりに使用する必要があります。

  2. システムは、メインUIスレッドの両方onStartを呼び出します。アプリが「応答しない」ように見える理由は、メインUIスレッドで呼び出しているためです。メインUIスレッドは、レイアウトの生成とタッチ/UIイベントへの応答を担当します。の呼び出しにより、これらすべての発生が防止されているため、アプリがハングしているように見えます(最終的には、アプリケーションが応答しないというエラーが発生します)。onStartCommand Thread.sleep(20000)Thread.sleep

于 2012-07-30T04:45:58.000 に答える