2015-07-04 3 views
0

Как показано ниже, я создал 2 внутренних класса, которые расширяются как Handler. Я прочитал код в исходных файлах Android, найденных Handler.sendEmptyMessage() только в очереди в сообщении Looper в очереди сообщений.Почему этот обработчик Android не работает?

public class MainActivity extends Activity{ 
    private Handler handler = new Handler(Looper.getMainLooper()){ 
     public void handleMessage(Message msg){ 
      //handle method1 
     } 
    } 
    ...... 
} 

public class MyService extends Service{ 
    private Handler handler = new Handler(Looper.getMainLooper()); 

    public void test(){ 
     handler.sendEmptyMessage(0x00); 
    } 
    ...... 
} 

Итак, я запутанный о том, почему в MainActivity первого Handler не может обработать сообщение от второго Handler в MyService, когда построен с тем же петлителем?

+1

Если вы хотите отправить сообщение от службы к вашей деятельности, это не верно способ сделать это. Вы можете проверить это: http://stackoverflow.com/questions/4300291/example-communication-between-activity-and-service-using-messaging для получения дополнительной информации. – Rotem

+0

@Rotem Не могли бы вы рассказать мне, что произойдет, если у меня есть несколько обработчиков, связанных с одним и тем же петлером? – JY0284

+1

Вы не можете общаться между обработчиками, у каждого обработчика есть своя очередь сообщений - как указано здесь: http://stackoverflow.com/questions/15538270/handlers-initialized-with-looper-getmainlooper-does-not-respond-to -message-cal? answertab = votes # tab-top – Rotem

ответ

0

Вы не можете общаться между обработчиками, каждый обработчик имеет свою собственную очередь, - как здесь ответ:

Handlers initialized with Looper.getMainLooper() does not respond to message callbacks

+0

[android.os.handler] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0 .0_r1/android/os/Handler.java # Обработчик.% 3Cinit% 3E% 28android.os.Handler.Callback% 2Cboolean% 29) Я не могу убедиться, что каждый обработчик имеет ** свою собственную очередь сообщений **. исходный код ** mQueue = mLooper.mQueue **. – JY0284

+0

Это не его собственная, это очередь сообщений в потоке, и каждый обработчик связан с одним протектором. Я понимаю, что вы пытаетесь сделать, но он не должен так работать. – Rotem