La mise à jour de l'INTERFACE utilisateur à partir d'un service (à l'aide d'un gestionnaire?)

Je suis en train de mettre à jour mon INTERFACE dans FirstActivity quand je reçois une notification, mais est confondu par runOnUiThread , Runnable et Handler. Voici ce que j'ai: je suis en cours d'exécution FirstActivity et NotificationService. Lorsque NotificationService reeives une notification, elle sera mise à jour FirstActivity de l'INTERFACE utilisateur.

J'ai aussi un autre service de AlarmService en cours d'exécution.
Première Activité

@Override
public void onResume() {
      super.onResume();
      //some other code for alarm service
}

NotificationService

    //on receiving notification
    private void showNotification(String text) {

   //Get activity
   Class<?> activityClass = null;
     try {
         activityClass = Class.forName("com.pakage.FirstActivity");
         contextActivity = (Activity) activityClass.newInstance();

         //Update UI on FirstActivity not working
         contextActivity.runOnUiThread(new Runnable() {
             public void run()
             { 
               Looper.prepare();
               TextView tv = (TextView ) contextActivity.findViewById(R.id.notifyTest);
               Looper.loop();

             }
             });

     } catch (Exception e) {
         e.printStackTrace();
     }

            //Shows the notification
            Notification n = new Notification();    
            //... etc   
}

Je reçois un looper.préparer erreur. Dois-je mettre les codes dans mon FirstActivity?

pouvez-vous nous montrer les messages dans votre journal de logcat? Aussi, comment avez-vous déclarer le Looper?
Je suis Can't create handler inside thread that has not called Looper.prepare() erreur. Looper est déclarée dans le showNotification méthode ci-dessus
Vous obtenez cette erreur, parce que vous êtes en cours d'exécution de votre code sur le thread d'INTERFACE utilisateur, qui possède déjà un Looper de cycle de vie. Pour éviter cette erreur, vous pouvez simplement supprimer Looper.prepare(), mais il fait un non-sens puisque " Looper.loop()' pourrait bloquer le thread entier et l'INTERFACE utilisateur de votre application ni travail, ni répondre plus!

OriginalL'auteur newbie | 2011-10-29